diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm
index 85a1c2b0215..d29e6769dd2 100644
--- a/code/datums/supplypacks.dm
+++ b/code/datums/supplypacks.dm
@@ -31,7 +31,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
if(5)
return "Science"
if(6)
- return "Food & Livestock"
+ return "Food and Livestock"
if(7)
return "Raw Materials"
if(8)
@@ -75,7 +75,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/datum/supply_packs/emergency/evac
- name = "Emergency equipment"
+ name = "Emergency Equipment Crate"
contains = list(/obj/machinery/bot/floorbot,
/obj/machinery/bot/floorbot,
/obj/machinery/bot/medbot,
@@ -125,7 +125,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
containername = "firefighting crate"
/datum/supply_packs/emergency/atmostank
- name = "Firefighting Watertank"
+ name = "Firefighting Watertank Crate"
contains = list(/obj/item/weapon/watertank/atmos)
cost = 10
containertype = /obj/structure/closet/crate/secure
@@ -144,7 +144,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
access = access_hydroponics
/datum/supply_packs/emergency/specialops
- name = "Special Ops supplies"
+ name = "Special Ops Supplies"
contains = list(/obj/item/weapon/storage/box/emps,
/obj/item/weapon/grenade/smokebomb,
/obj/item/weapon/grenade/smokebomb,
@@ -413,7 +413,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
containername = "insulated gloves crate"
/datum/supply_packs/engineering/power
- name = "Powercell Crate"
+ name = "Power Cell Crate"
contains = list(/obj/item/weapon/stock_parts/cell/high, //Changed to an extra high powercell because normal cells are useless
/obj/item/weapon/stock_parts/cell/high,
/obj/item/weapon/stock_parts/cell/high)
@@ -524,7 +524,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/obj/item/weapon/storage/briefcase/inflatable,
/obj/item/weapon/storage/briefcase/inflatable)
cost = 20
- containername = "Inflatable Barrier Crate"
+ containername = "inflatable barrier crate"
/datum/supply_packs/engineering/engine/supermatter_shard
name = "Supermatter Shard Crate"
@@ -543,7 +543,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
)
cost = 25
containertype = /obj/structure/closet/crate/secure
- containername = "Thermo-Electric Generator Components"
+ containername = "thermo-electric generator crate"
access = access_ce
//////////////////////////////////////////////////////////////////////////////
@@ -586,21 +586,21 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
containername = "first aid kits crate"
/datum/supply_packs/medical/firstaidadv
- name = "Advaced First Aid Kits Crate"
+ name = "Advanced First Aid Kits Crate"
contains = list(/obj/item/weapon/storage/firstaid/adv,
/obj/item/weapon/storage/firstaid/adv,
/obj/item/weapon/storage/firstaid/adv,
/obj/item/weapon/storage/firstaid/adv)
cost = 10
- containername = "advaced first aid kits crate"
+ containername = "advanced first aid kits crate"
/datum/supply_packs/medical/firstaibrute
- name = "Brute Trauma Treatment Kits Crate"
+ name = "Brute Treatment Kits Crate"
contains = list(/obj/item/weapon/storage/firstaid/brute,
/obj/item/weapon/storage/firstaid/brute,
/obj/item/weapon/storage/firstaid/brute)
cost = 10
- containername = "brute trauma treatment kit"
+ containername = "brute first aid kits crate"
/datum/supply_packs/medical/firstaidburns
name = "Burns Treatment Kits Crate"
@@ -619,12 +619,12 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
containername = "toxin first aid kits crate"
/datum/supply_packs/medical/firstaidoxygen
- name = "Oxygen Deprivation Kits Crate"
+ name = "Oxygen Treatment Kits Crate"
contains = list(/obj/item/weapon/storage/firstaid/o2,
/obj/item/weapon/storage/firstaid/o2,
/obj/item/weapon/storage/firstaid/o2)
cost = 10
- containername = "oxygen deprivation kits crate"
+ containername = "oxygen first aid kits crate"
/datum/supply_packs/medical/virus
name = "Virus Crate"
@@ -657,11 +657,11 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
contains = list(/obj/machinery/iv_drip)
cost = 30
containertype = /obj/structure/closet/crate/secure
- containername = "iv drip crate"
+ containername = "IV drip crate"
access = access_cmo
/datum/supply_packs/medical/surgery
- name = "Surgery crate"
+ name = "Surgery Crate"
contains = list(/obj/item/weapon/cautery,
/obj/item/weapon/surgicaldrill,
/obj/item/clothing/mask/breath/medical,
@@ -675,7 +675,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/obj/item/weapon/circular_saw)
cost = 25
containertype = /obj/structure/closet/crate/secure
- containername = "Surgery crate"
+ containername = "surgery crate"
access = access_medical
@@ -703,7 +703,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
access = access_robotics
/datum/supply_packs/science/robotics/mecha_ripley
- name = "Circuit Crate (\"Ripley\" APLU)"
+ name = "Circuit Crate (Ripley APLU)"
contains = list(/obj/item/weapon/book/manual/ripley_build_and_repair,
/obj/item/weapon/circuitboard/mecha/ripley/main, //TEMPORARY due to lack of circuitboard printer
/obj/item/weapon/circuitboard/mecha/ripley/peripherals) //TEMPORARY due to lack of circuitboard printer
@@ -712,7 +712,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
containername = "\improper APLU \"Ripley\" circuit crate"
/datum/supply_packs/science/robotics/mecha_odysseus
- name = "Circuit Crate (\"Odysseus\")"
+ name = "Circuit Crate (Odysseus)"
contains = list(/obj/item/weapon/circuitboard/mecha/odysseus/peripherals, //TEMPORARY due to lack of circuitboard printer
/obj/item/weapon/circuitboard/mecha/odysseus/main) //TEMPORARY due to lack of circuitboard printer
cost = 25
@@ -740,7 +740,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
group = supply_science
/datum/supply_packs/science/shieldwalls
- name = "Shield Generators"
+ name = "Shield Generators Crate"
contains = list(/obj/machinery/shieldwallgen,
/obj/machinery/shieldwallgen,
/obj/machinery/shieldwallgen,
@@ -752,12 +752,12 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/datum/supply_packs/science/transfer_valves
- name = "Tank Transfer Valves"
+ name = "Tank Transfer Valves Crate"
contains = list(/obj/item/device/transfer_valve,
/obj/item/device/transfer_valve)
cost = 60
containertype = /obj/structure/closet/crate/secure
- containername = "transfer valves crate"
+ containername = "tank transfer valves crate"
access = access_rd
@@ -805,33 +805,33 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
containername = "monkey crate"
/datum/supply_packs/organic/farwa
- name = "Farwa crate"
+ name = "Farwa Crate"
contains = list (/obj/item/weapon/storage/box/farwacubes)
cost = 30
containername = "farwa crate"
/datum/supply_packs/organic/wolpin
- name = "Wolpin crate"
+ name = "Wolpin Crate"
contains = list (/obj/item/weapon/storage/box/wolpincubes)
cost = 30
containername = "wolpin crate"
/datum/supply_packs/organic/skrell
- name = "Neaera crate"
+ name = "Neaera Crate"
contains = list (/obj/item/weapon/storage/box/neaeracubes)
cost = 30
containername = "neaera crate"
/datum/supply_packs/organic/stok
- name = "Stok crate"
+ name = "Stok Crate"
contains = list (/obj/item/weapon/storage/box/stokcubes)
cost = 30
containername = "stok crate"
/datum/supply_packs/organic/party
- name = "Party equipment"
+ name = "Party Equipment Crate"
contains = list(/obj/item/weapon/storage/box/drinkingglasses,
/obj/item/weapon/reagent_containers/food/drinks/shaker,
/obj/item/weapon/reagent_containers/food/drinks/bottle/patron,
@@ -923,7 +923,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
containername = "hydroponics crate"
/datum/supply_packs/misc/hydroponics/hydrotank
- name = "Hydroponics Watertank Backpack Crate"
+ name = "Hydroponics Watertank Crate"
contains = list(/obj/item/weapon/watertank)
cost = 10
containertype = /obj/structure/closet/crate/secure
@@ -995,42 +995,42 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/datum/supply_packs/materials/metal50
- name = "50 Metal Sheets"
+ name = "50 Metal Sheets Crate"
contains = list(/obj/item/stack/sheet/metal)
amount = 50
cost = 10
containername = "metal sheets crate"
/datum/supply_packs/materials/plasteel20
- name = "20 Plasteel Sheets"
+ name = "20 Plasteel Sheets Crate"
contains = list(/obj/item/stack/sheet/plasteel)
amount = 20
cost = 30
containername = "plasteel sheets crate"
/datum/supply_packs/materials/plasteel50
- name = "50 Plasteel Sheets"
+ name = "50 Plasteel Sheets Crate"
contains = list(/obj/item/stack/sheet/plasteel)
amount = 50
cost = 50
containername = "plasteel sheets crate"
/datum/supply_packs/materials/glass50
- name = "50 Glass Sheets"
+ name = "50 Glass Sheets Crate"
contains = list(/obj/item/stack/sheet/glass)
amount = 50
cost = 10
containername = "glass sheets crate"
/datum/supply_packs/materials/cardboard50
- name = "50 Cardboard Sheets"
+ name = "50 Cardboard Sheets Crate"
contains = list(/obj/item/stack/sheet/cardboard)
amount = 50
cost = 10
containername = "cardboard sheets crate"
/datum/supply_packs/materials/sandstone30
- name = "30 Sandstone Blocks"
+ name = "30 Sandstone Blocks Crate"
contains = list(/obj/item/stack/sheet/mineral/sandstone)
amount = 30
cost = 20
@@ -1038,7 +1038,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/datum/supply_packs/materials/plastic30
- name = "30 Plastic Sheets"
+ name = "30 Plastic Sheets Crate"
contains = list(/obj/item/stack/sheet/mineral/plastic)
amount = 30
cost = 25
@@ -1057,7 +1057,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
contains = list(/obj/machinery/bot/mulebot)
cost = 20
containertype = /obj/structure/largecrate/mule
- containername = "\improper MULEbot Crate"
+ containername = "\improper MULEbot crate"
/datum/supply_packs/misc/watertank
name = "Water Tank Crate"
@@ -1120,7 +1120,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
containername = "bureaucracy crate"
/datum/supply_packs/misc/toner
- name = "Toner Cartridges crate"
+ name = "Toner Cartridges Crate"
contains = list(/obj/item/device/toner,
/obj/item/device/toner,
/obj/item/device/toner,
@@ -1131,7 +1131,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
containername = "toner cartridges crate"
/datum/supply_packs/misc/artscrafts
- name = "Arts and Crafts supplies"
+ name = "Arts and Crafts Supplies Crate"
contains = list(/obj/item/weapon/storage/fancy/crayons,
/obj/item/device/camera,
/obj/item/device/camera_film,
@@ -1151,7 +1151,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/obj/item/stack/wrapping_paper,
/obj/item/stack/wrapping_paper)
cost = 10
- containername = "Arts and Crafts crate"
+ containername = "arts and crafts crate"
/datum/supply_packs/misc/posters
name = "Corporate Posters Crate"
@@ -1161,7 +1161,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/obj/item/weapon/contraband/poster/legit,
/obj/item/weapon/contraband/poster/legit)
cost = 8
- containername = "Corporate Posters Crate"
+ containername = "corporate posters crate"
///////////// Janitor Supplies
@@ -1200,12 +1200,12 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
access = access_janitor
/datum/supply_packs/misc/janitor/lightbulbs
- name = "Replacement Lights"
+ name = "Replacement Lights Crate"
contains = list(/obj/item/weapon/storage/box/lights/mixed,
/obj/item/weapon/storage/box/lights/mixed,
/obj/item/weapon/storage/box/lights/mixed)
cost = 10
- containername = "replacement lights"
+ containername = "replacement lights crate"
///////////// Costumes
@@ -1239,7 +1239,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
containername = "wizard costume crate"
/datum/supply_packs/misc/mafia
- name = "Mafia Supply crate"
+ name = "Mafia Supply Crate"
contains = list(/obj/item/clothing/suit/browntrenchcoat =1,/obj/item/clothing/suit/blacktrenchcoat =1,/obj/item/clothing/head/fedora/whitefedora =1,
/obj/item/clothing/head/fedora/brownfedora =1,/obj/item/clothing/head/fedora =1,/obj/item/clothing/under/flappers =1,/obj/item/clothing/under/mafia =1,/obj/item/clothing/under/mafia/vest =1,/obj/item/clothing/under/mafia/white =1,
/obj/item/clothing/under/mafia/sue =1,/obj/item/clothing/under/mafia/tan =1, /obj/item/toy/crossbow/tommygun =2)
@@ -1268,7 +1268,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
/obj/item/clothing/head/collectable/slime,
/obj/item/clothing/head/collectable/xenom,
/obj/item/clothing/head/collectable/petehat)
- name = "Collectable hat crate!"
+ name = "Collectible Hats Crate"
cost = 200
containername = "collectable hats crate! Brought to you by Bass.inc!"
@@ -1289,7 +1289,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine
contraband = 1
/datum/supply_packs/misc/formalwear //This is a very classy crate.
- name = "Formal-wear Crate"
+ name = "Formal Wear Crate"
contains = list(/obj/item/clothing/under/blacktango,
/obj/item/clothing/under/assistantformal,
/obj/item/clothing/under/assistantformal,
diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm
index 847c4179d8f..b66a5f7aecb 100644
--- a/code/game/supplyshuttle.dm
+++ b/code/game/supplyshuttle.dm
@@ -3,6 +3,8 @@
#define SUPPLY_STATIONZ 1 //Z-level of the Station.
#define SUPPLY_STATION_AREATYPE "/area/supply/station" //Type of the supply shuttle area for station
#define SUPPLY_DOCK_AREATYPE "/area/supply/dock" //Type of the supply shuttle area for dock
+#define COMP_SCREEN_WIDTH 580 //width of supply.order computer interaction window
+#define COMP_SCREEN_HEIGHT 555 //height of supply order computer interaction window
var/datum/controller/supply/supply_controller = new()
@@ -104,22 +106,23 @@ var/list/mechtoys = list(
icon = 'icons/obj/computer.dmi'
icon_screen = "supply"
req_access = list(access_cargo)
- circuit = "/obj/item/weapon/circuitboard/supplycomp"
+ circuit = /obj/item/weapon/circuitboard/supplycomp
var/temp = null
var/reqtime = 0 //Cooldown for requisitions - Quarxink
var/hacked = 0
var/can_order_contraband = 0
var/last_viewed_group = "categories"
+ var/datum/supply_packs/content_pack
/obj/machinery/computer/ordercomp
name = "Supply Ordering Console"
desc = "Used to order supplies from cargo staff."
icon = 'icons/obj/computer.dmi'
icon_screen = "request"
- circuit = "/obj/item/weapon/circuitboard/ordercomp"
- var/temp = null
+ circuit = /obj/item/weapon/circuitboard/ordercomp
var/reqtime = 0 //Cooldown for requisitions - Quarxink
var/last_viewed_group = "categories"
+ var/datum/supply_packs/content_pack
/*
/obj/effect/marker/supplymarker
@@ -261,7 +264,7 @@ var/list/mechtoys = list(
var/datum/supply_packs/SP = SO.object
var/atom/A = new SP.containertype(pickedloc)
- A.name = "[SP.containername] [SO.comment ? "([SO.comment])":"" ]"
+ A.name = "[SP.containername]"// [SO.comment ? "([SO.comment])":"" ]"
//supply manifest generation begin
@@ -312,96 +315,102 @@ var/list/mechtoys = list(
/obj/item/weapon/paper/manifest
name = "Supply Manifest"
-
/obj/machinery/computer/ordercomp/attack_ai(var/mob/user as mob)
return attack_hand(user)
-
-/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
- Close"}
-
- user << browse(dat, "window=computer;size=575x450")
- onclose(user, "computer")
+ ui_interact(usr)
return
+/obj/machinery/computer/ordercomp/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null)
+ // data to send to ui
+ var/data[0]
+ data["last_viewed_group"] = last_viewed_group
+
+ var/category_list[0]
+ for(var/category in all_supply_groups)
+ category_list.Add(list(list("name" = get_supply_group_name(category), "category" = category)))
+ data["categories"] = category_list
+
+ var/cat = text2num(last_viewed_group)
+ var/packs_list[0]
+ for(var/set_name in supply_controller.supply_packs)
+ var/datum/supply_packs/pack = supply_controller.supply_packs[set_name]
+ if(!pack.contraband && !pack.hidden && pack.group == cat)
+ // 0/1 after the pack name (set_name) is a boolean for ordering multiple crates
+ packs_list.Add(list(list("name" = pack.name, "amount" = pack.amount, "cost" = pack.cost, "command1" = list("doorder" = "[set_name]0"), "command2" = list("doorder" = "[set_name]1"), "command3" = list("contents" = set_name))))
+
+ data["supply_packs"] = packs_list
+ if(content_pack)
+ var/pack_name = sanitize(content_pack.name)
+ data["contents_name"] = pack_name
+ data["contents"] = content_pack.manifest
+ data["contents_access"] = get_access_desc(content_pack.access)
+
+ var/requests_list[0]
+ for(var/set_name in supply_controller.requestlist)
+ var/datum/supply_order/SO = set_name
+ if(SO)
+ // Check if the usr owns the request, so they can cancel requests
+ var/obj/item/weapon/card/id/I = usr.get_id_card()
+ var/owned = 0
+ if(I && SO.orderedby == I.registered_name)
+ owned = 1
+ requests_list.Add(list(list("ordernum" = SO.ordernum, "supply_type" = SO.object.name, "orderedby" = SO.orderedby, "owned" = owned, "command1" = list("rreq" = SO.ordernum))))
+ data["requests"] = requests_list
+
+ var/orders_list[0]
+ for(var/set_name in supply_controller.shoppinglist)
+ var/datum/supply_order/SO = set_name
+ if(SO)
+ orders_list.Add(list(list("ordernum" = SO.ordernum, "supply_type" = SO.object.name, "orderedby" = SO.orderedby)))
+ data["orders"] = orders_list
+
+ data["points"] = supply_controller.points
+ data["send"] = list("send" = 1)
+
+ var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle
+ data["moving"] = shuttle.has_arrive_time()
+ data["at_station"] = shuttle.at_station()
+ data["timeleft"] = shuttle.eta_minutes()
+ if(shuttle.docking_controller)
+ data["docked"] = capitalize(shuttle.docking_controller.get_docking_status())
+
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data)
+ if(!ui)
+ ui = new(user, src, ui_key, "order_console.tmpl", name, COMP_SCREEN_WIDTH, COMP_SCREEN_HEIGHT)
+ ui.set_initial_data(data)
+ ui.open()
+
/obj/machinery/computer/ordercomp/Topic(href, href_list)
if(..())
- return
+ 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/cat in all_supply_groups )
- temp += "[get_supply_group_name(cat)]
"
- else
- last_viewed_group = href_list["order"]
- var/cat = text2num(last_viewed_group)
- temp = "Supply points: [supply_controller.points]
"
- temp += "Back to all categories
"
- temp += "Request from: [get_supply_group_name(cat)]
"
- for(var/supply_type in supply_controller.supply_packs )
- var/datum/supply_packs/N = supply_controller.supply_packs[supply_type]
- if(N.hidden || N.contraband || N.group != cat) continue
- temp += "[N.name]" //Have to send the type instead of a reference to the obj because it would get caught by the garbage
- temp += " (contents)"
- temp += " Cost: [N.cost]
"
-
- else if (href_list["see_contents"])
- //Find the correct supply_pack datum
- var/datum/supply_packs/P = supply_controller.supply_packs[href_list["see_contents"]]
- if(!istype(P)) return
-
- var/cat = P.group
- var/tempaccess = get_access_desc(P.access)
-
- temp = "Supply points: [supply_controller.points]
"
- temp += "Back to [get_supply_group_name(cat)]
"
- temp += "Access restriction: [tempaccess ? tempaccess : "None"]
"
- temp += "Contents of [P.name]:
"
- temp += P.manifest
-
- else if (href_list["doorder"])
+ 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.\"")
+ visible_message("[src]'s monitor flashes, \"[world.time - reqtime] seconds remaining until another requisition form may be printed.\"")
+ nanomanager.update_uis(src)
return
-
- //Find the correct supply_pack datum
- var/datum/supply_packs/P = supply_controller.supply_packs[href_list["doorder"]]
- if(!istype(P)) return
+
+ var/index = copytext(href_list["doorder"], 1, lentext(href_list["doorder"])) //text2num(copytext(href_list["doorder"], 1))
+ var/multi = text2num(copytext(href_list["doorder"], -1))
+ if(!isnum(multi))
+ return
+ var/datum/supply_packs/P = supply_controller.supply_packs[index]
+ if(!istype(P))
+ return
+ var/crates = 1
+ if(multi)
+ var/num_input = input(usr, "Amount:", "How many crates?", "") as num
+ crates = Clamp(round(text2num(num_input)), 1, 20)
+ if(..())
+ return
var/timeout = world.time + 600
var/reason = sanitize(copytext(input(usr,"Reason:","Why do you require this item?","") as null|text,1,MAX_MESSAGE_LEN))
- if(world.time > timeout) return
- if(!reason) return
-
+ if(world.time > timeout || !reason || ..())
+ return
+
var/idname = "*None Provided*"
var/idrank = "*None Provided*"
if(ishuman(usr))
@@ -413,13 +422,14 @@ var/list/mechtoys = list(
supply_controller.ordernum++
var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(loc)
- reqform.name = "Requisition Form - [P.name]"
+ reqform.name = "Requisition Form - [crates] '[P.name]' for [idname]"
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 += "NUMBER OF CRATES: [crates]
"
reqform.info += "ACCESS RESTRICTION: [replacetext(get_access_desc(P.access))]
"
reqform.info += "CONTENTS:
"
reqform.info += P.manifest
@@ -429,130 +439,154 @@ var/list/mechtoys = list(
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
+ //make our supply_order datums
+ for(var/i = 1; i <= crates; i++)
+ supply_controller.ordernum++
+ var/datum/supply_order/O = new /datum/supply_order()
+ O.ordernum = supply_controller.ordernum
+ O.object = P
+ O.orderedby = idname
+ O.comment = reason
+ 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["rreq"])
+ var/ordernum = text2num(href_list["rreq"])
+ var/obj/item/weapon/card/id/I = usr.get_id_card()
+ for(var/i=1, i<=supply_controller.requestlist.len, i++)
+ var/datum/supply_order/SO = supply_controller.requestlist[i]
+ if(SO.ordernum == ordernum && (I && SO.orderedby == I.registered_name))
+ supply_controller.requestlist.Cut(i,i+1)
+ break
- 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
+ else if (href_list["last_viewed_group"])
+ content_pack = null
+ last_viewed_group = text2num(href_list["last_viewed_group"])
+
+ else if (href_list["contents"])
+ var/topic = href_list["contents"]
+ if(topic == 1)
+ content_pack = null
+ else
+ var/datum/supply_packs/P = supply_controller.supply_packs[topic]
+ content_pack = P
add_fingerprint(usr)
- updateUsrDialog()
+ nanomanager.update_uis(src)
return
+/obj/machinery/computer/supplycomp/attack_ai(var/mob/user as mob)
+ return attack_hand(user)
+
/obj/machinery/computer/supplycomp/attack_hand(var/mob/user as mob)
- if(!allowed(user))
- user << "\red Access Denied."
+ if(!allowed(user) && !isobserver(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
- \nClose"}
-
-
- user << browse(dat, "window=computer;size=575x450")
- onclose(user, "computer")
+ ui_interact(user)
return
-/obj/machinery/computer/supplycomp/attackby(I as obj, user as mob, params)
- if(istype(I,/obj/item/weapon/card/emag) && !hacked)
- user << "\blue Special supplies unlocked."
+/obj/machinery/computer/supplycomp/emag_act(user as mob)
+ if(!hacked)
+ user << "Special supplies unlocked."
hacked = 1
return
- else
- ..()
- return
+
+/obj/machinery/computer/supplycomp/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null)
+ // data to send to ui
+ var/data[0]
+ data["last_viewed_group"] = last_viewed_group
+
+ var/category_list[0]
+ for(var/category in all_supply_groups)
+ category_list.Add(list(list("name" = get_supply_group_name(category), "category" = category)))
+ data["categories"] = category_list
+
+ var/cat = text2num(last_viewed_group)
+ var/packs_list[0]
+ for(var/set_name in supply_controller.supply_packs)
+ var/datum/supply_packs/pack = supply_controller.supply_packs[set_name]
+ if((pack.hidden && src.hacked) || (pack.contraband && src.can_order_contraband) || (!pack.contraband && !pack.hidden))
+ if(pack.group == cat)
+ // 0/1 after the pack name (set_name) is a boolean for ordering multiple crates
+ packs_list.Add(list(list("name" = pack.name, "amount" = pack.amount, "cost" = pack.cost, "command1" = list("doorder" = "[set_name]0"), "command2" = list("doorder" = "[set_name]1"), "command3" = list("contents" = set_name))))
+
+ data["supply_packs"] = packs_list
+ if(content_pack)
+ var/pack_name = sanitize(content_pack.name)
+ data["contents_name"] = pack_name
+ data["contents"] = content_pack.manifest
+ data["contents_access"] = get_access_desc(content_pack.access)
+
+ var/requests_list[0]
+ for(var/set_name in supply_controller.requestlist)
+ var/datum/supply_order/SO = set_name
+ if(SO)
+ if(!SO.comment)
+ SO.comment = "No comment."
+ requests_list.Add(list(list("ordernum" = SO.ordernum, "supply_type" = SO.object.name, "orderedby" = SO.orderedby, "comment" = SO.comment, "command1" = list("confirmorder" = SO.ordernum), "command2" = list("rreq" = SO.ordernum))))
+ data["requests"] = requests_list
+
+ var/orders_list[0]
+ for(var/set_name in supply_controller.shoppinglist)
+ var/datum/supply_order/SO = set_name
+ if(SO)
+ orders_list.Add(list(list("ordernum" = SO.ordernum, "supply_type" = SO.object.name, "orderedby" = SO.orderedby, "comment" = SO.comment)))
+ data["orders"] = orders_list
+
+ data["points"] = supply_controller.points
+ data["send"] = list("send" = 1)
+
+ var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle
+ data["moving"] = shuttle.has_arrive_time()
+ data["at_station"] = shuttle.at_station()
+ data["timeleft"] = shuttle.eta_minutes()
+ data["can_launch"] = shuttle.can_launch()
+ data["can_force"] = shuttle.can_force()
+ data["can_cancel"] = shuttle.can_cancel()
+ if(shuttle.docking_controller)
+ data["docked"] = capitalize(shuttle.docking_controller.get_docking_status())
+
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data)
+ if(!ui)
+ ui = new(user, src, ui_key, "supply_console.tmpl", name, COMP_SCREEN_WIDTH, COMP_SCREEN_HEIGHT)
+ ui.set_initial_data(data)
+ ui.open()
+ ui.set_auto_update(1)
+
+/obj/machinery/computer/supplycomp/proc/is_authorized(user)
+ if(allowed(user))
+ return 1
+
+ if(isobserver(user) && check_rights(R_ADMIN, 0))
+ return 1
+
+ return 0
/obj/machinery/computer/supplycomp/Topic(href, href_list)
- if(!supply_controller)
- log_to_dd("## ERROR: Eek. The supply_controller controller datum is missing somehow.")
- return
- var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle
- if (!shuttle)
- log_to_dd("## ERROR: Eek. The supply/shuttle datum is missing somehow.")
- return
if(..())
- return
-
- if(isturf(loc) && ( in_range(src, usr) || istype(usr, /mob/living/silicon) ) )
- usr.set_machine(src)
-
- //Calling the shuttle
+ return 1
+
+ if(!is_authorized(usr))
+ return 1
+
+ if(!supply_controller)
+ log_to_dd("## ERROR: The supply_controller controller datum is missing somehow.")
+ return 1
+
+ var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle
+ if(!shuttle)
+ log_to_dd("## ERROR: The supply or shuttle datum is missing somehow.")
+ return 1
+
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"
+ usr = "For safety reasons the automated supply shuttle cannot transport live organisms, classified nuclear weaponry or homing beacons."
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")
if (href_list["force_send"])
@@ -561,70 +595,34 @@ var/list/mechtoys = list(
if (href_list["cancel_send"])
shuttle.cancel_launch(src)
- 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/cat in all_supply_groups )
- temp += "[get_supply_group_name(cat)]
"
- else
- last_viewed_group = href_list["order"]
- var/cat = text2num(last_viewed_group)
- temp = "Supply points: [supply_controller.points]
"
- temp += "Back to all categories
"
- temp += "Request from: [get_supply_group_name(cat)]
"
- for(var/supply_type in supply_controller.supply_packs )
- var/datum/supply_packs/N = supply_controller.supply_packs[supply_type]
- if((N.hidden && !hacked) || (N.contraband && !can_order_contraband) || N.group != cat) continue
- temp += "[N.name]" //Have to send the type instead of a reference to the obj because it would get caught by the garbage
- temp += " (contents)"
- temp += " Cost: [N.cost]
"
-
- /*temp = "Supply points: [supply_controller.points]
Request what?
"
-
- for(var/supply_name in supply_controller.supply_packs )
- var/datum/supply_packs/N = supply_controller.supply_packs[supply_name]
- if(N.hidden && !hacked) continue
- if(N.contraband && !can_order_contraband) continue
- temp += "[supply_name] Cost: [N.cost]
" //the obj because it would get caught by the garbage
- temp += "
OK"*/
-
- else if (href_list["see_contents"])
- //Find the correct supply_pack datum
- var/datum/supply_packs/P = supply_controller.supply_packs[href_list["see_contents"]]
- if(!istype(P)) return
-
- var/cat = P.group
- var/tempaccess = get_access_desc(P.access)
-
- temp = "Supply points: [supply_controller.points]
"
- temp += "Back to [get_supply_group_name(cat)]
"
- temp += "Access restriction: [tempaccess ? tempaccess : "None"]
"
- temp += "Contents of [P.name]:
"
- temp += P.manifest
-
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.\"")
+ visible_message("[src]'s monitor flashes, \"[world.time - reqtime] seconds remaining until another requisition form may be printed.\"")
+ nanomanager.update_uis(src)
return
- //Find the correct supply_pack datum
- var/datum/supply_packs/P = supply_controller.supply_packs[href_list["doorder"]]
- if(!istype(P)) return
-
+ var/index = copytext(href_list["doorder"], 1, lentext(href_list["doorder"])) //text2num(copytext(href_list["doorder"], 1))
+ var/multi = text2num(copytext(href_list["doorder"], -1))
+ if(!isnum(multi))
+ return
+ var/datum/supply_packs/P = supply_controller.supply_packs[index]
+ if(!istype(P))
+ return
+ var/crates = 1
+ if(multi)
+ var/num_input = input(usr, "Amount:", "How many crates?", "") as num
+ crates = Clamp(round(text2num(num_input)), 1, 20)
+ if(..())
+ return
+
var/timeout = world.time + 600
var/reason = sanitize(copytext(input(usr,"Reason:","Why do you require this item?","") as null|text,1,MAX_MESSAGE_LEN))
- if(world.time > timeout) return
- if(!reason) return
-
+ if(world.time > timeout || !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()
@@ -634,13 +632,14 @@ var/list/mechtoys = list(
supply_controller.ordernum++
var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(loc)
- reqform.name = "Requisition Form - [P.name]"
+ reqform.name = "Requisition Form - [crates] '[P.name]' for [idname]"
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 += "NUMBER OF CRATES: [crates]
"
reqform.info += "ACCESS RESTRICTION: [replacetext(get_access_desc(P.access))]
"
reqform.info += "CONTENTS:
"
reqform.info += P.manifest
@@ -651,21 +650,20 @@ var/list/mechtoys = list(
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 = "Order request placed.
"
- temp += "
Back | Main Menu | Authorize Order"
-
+ for(var/i = 1; i <= crates; i++)
+ supply_controller.ordernum++
+ var/datum/supply_order/O = new /datum/supply_order()
+ O.ordernum = supply_controller.ordernum
+ O.object = P
+ O.orderedby = idname
+ O.comment = reason
+ supply_controller.requestlist += O
+
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)
@@ -675,64 +673,34 @@ var/list/mechtoys = list(
supply_controller.requestlist.Cut(i,i+1)
supply_controller.points -= P.cost
supply_controller.shoppinglist += O
- temp = "Thanks for your order.
"
else
- temp = "Not enough supply points.
"
+ usr << "There are insufficient supply points for this request."
break
- 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.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]
"
-
- 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
"
-
- temp += "
Clear list"
- temp += "
OK"
-
+
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"
- else if (href_list["clearreq"])
- supply_controller.requestlist.Cut()
- temp = "List cleared.
"
- temp += "
OK"
-
- else if (href_list["mainmenu"])
- temp = null
+ else if (href_list["last_viewed_group"])
+ content_pack = null
+ last_viewed_group = text2num(href_list["last_viewed_group"])
+
+ else if (href_list["contents"])
+ var/topic = href_list["contents"]
+ if(topic == 1)
+ content_pack = null
+ else
+ var/datum/supply_packs/P = supply_controller.supply_packs[topic]
+ content_pack = P
add_fingerprint(usr)
- updateUsrDialog()
- return
+ nanomanager.update_uis(src)
/obj/machinery/computer/supplycomp/proc/post_signal(var/command)
-
var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435)
if(!frequency) return
@@ -743,7 +711,3 @@ var/list/mechtoys = list(
status_signal.data["command"] = command
frequency.post_signal(src, status_signal)
-
-
-
-
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index 90c1574c7eb..04b8745c4ac 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -261,3 +261,11 @@
qdel(W)
return equipped
+/mob/proc/get_all_slots()
+ return list(wear_mask, back, l_hand, r_hand)
+
+/mob/proc/get_id_card()
+ for(var/obj/item/I in src.get_all_slots())
+ . = I.GetID()
+ if(.)
+ break
\ No newline at end of file
diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm
index e1cae9e3c66..ca265cdcfe3 100644
--- a/code/modules/mob/language.dm
+++ b/code/modules/mob/language.dm
@@ -248,11 +248,12 @@
syllables = list("02011","01222","10100","10210","21012","02011","21200","1002","2001","0002","0012","0012","000","120","121","201","220","10","11","0")
/datum/language/machine/get_random_name()
+ var/new_name
if(prob(70))
- name = "[pick(list("PBU","HIU","SINA","ARMA","OSI"))]-[rand(100, 999)]"
+ new_name = "[pick(list("PBU","HIU","SINA","ARMA","OSI"))]-[rand(100, 999)]"
else
- name = pick(ai_names)
- return name
+ new_name = pick(ai_names)
+ return new_name
/datum/language/kidan
name = "Chittin"
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index b0b7d85e97e..b23874b399f 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -683,4 +683,12 @@ var/list/ventcrawl_machinery = list(/obj/machinery/atmospherics/unary/vent_pump,
if(buckled) return initial(pixel_y)
return -6
else
- return initial(pixel_y)
\ No newline at end of file
+ return initial(pixel_y)
+
+/mob/living/carbon/get_all_slots()
+ return list(l_hand,
+ r_hand,
+ handcuffed,
+ legcuffed,
+ back,
+ wear_mask)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index 507c8dab0ca..4bea67b9ab3 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -884,3 +884,33 @@ It can still be worn/put on as normal.
if(slot_s_store)
return s_store
return null
+
+/mob/living/carbon/human/get_all_slots()
+ . = get_head_slots() | get_body_slots()
+
+/mob/living/carbon/human/proc/get_body_slots()
+ return list(
+ l_hand,
+ r_hand,
+ back,
+ s_store,
+ handcuffed,
+ legcuffed,
+ wear_suit,
+ gloves,
+ shoes,
+ belt,
+ wear_id,
+ l_store,
+ r_store,
+ w_uniform
+ )
+
+/mob/living/carbon/human/proc/get_head_slots()
+ return list(
+ head,
+ wear_mask,
+ glasses,
+ r_ear,
+ l_ear,
+ )
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm
index da2157f44bc..9c1d8b79f92 100644
--- a/code/modules/mob/living/silicon/robot/inventory.dm
+++ b/code/modules/mob/living/silicon/robot/inventory.dm
@@ -5,7 +5,8 @@
/mob/living/silicon/robot/get_active_hand()
return module_active
-
+/mob/living/silicon/robot/get_all_slots()
+ return list(module_state_1, module_state_2, module_state_3)
/*-------TODOOOOOOOOOO--------*/
/mob/living/silicon/robot/proc/uneq_module(obj/item/O)
diff --git a/nano/templates/order_console.tmpl b/nano/templates/order_console.tmpl
new file mode 100644
index 00000000000..70fe24f881e
--- /dev/null
+++ b/nano/templates/order_console.tmpl
@@ -0,0 +1,111 @@
+
+
+
+
+
+ Supply Points:
+
+
+ {{:data.points}}
+
+
+
+
+ Shuttle Status:
+
+
+ {{if !data.moving && !data.at_station}}
+ {{:data.docked}} off-station.
+ {{else !data.moving && data.at_station}}
+ {{:data.docked}} at the station.
+ {{else data.moving}}
+ Shuttle is en route (ETA: {{:data.timeleft}} minutes).
+ {{/if}}
+
+
+
+
+ Supply Crates
+
+
+
+
+ {{if !data.contents}}
+ {{for data.supply_packs}}
+
+
+
{{:helper.link(value.name, null, value.command1)}}
+ {{:helper.link('#', null, value.command2, null)}}{{:helper.link('C', null, value.command3, null)}}
{{:value.cost}} points
+
+
+ {{/for}}
+ {{else}}
+
+ Contents of {{:data.contents_name}}
+
+ {{:data.contents}}
+ {{:helper.link('Return', 'arrow-1-w', {'contents' : 1})}}
+ {{/if}}
+
+
+
+
+
+
+ Categories
+
+ {{for data.categories}}
+
+ {{:helper.link(value.name, 'gear', {'last_viewed_group':value.category}, (data.last_viewed_group==value.category) ? 'linkOn' : '', null, 'category')}}
+
+ {{/for}}
+
+
+
+ Supply Orders
+
+
+
+
+
Requests
+
+ {{for data.requests}}
+
+ #{{:value.ordernum}} - {{:value.supply_type}} for {{:value.orderedby}}
+ {{if value.owned == 1}}
+ {{:helper.link('CANCEL', null, value.command1, null)}}
+ {{/if}}
+
+ {{empty}}
+ No active requests.
+ {{/for}}
+
+
Orders
+
+ {{for data.orders}}
+
+ #{{:value.ordernum}} - {{:value.supply_type}} for {{:value.orderedby}}
+
+ {{empty}}
+ No confirmed orders.
+ {{/for}}
+
+
+
+
\ No newline at end of file
diff --git a/nano/templates/supply_console.tmpl b/nano/templates/supply_console.tmpl
new file mode 100644
index 00000000000..0591cf18698
--- /dev/null
+++ b/nano/templates/supply_console.tmpl
@@ -0,0 +1,125 @@
+
+
+
+
+
+ Supply Points:
+
+
+ {{:data.points}}
+
+
+
+
+ Shuttle Status:
+
+
+ {{if !data.moving && !data.at_station}}
+ {{:data.docked}} off-station.
+ {{else !data.moving && data.at_station}}
+ {{:data.docked}} at the station.
+ {{else data.moving}}
+
Shuttle is en route (ETA: {{:data.timeleft}} minutes).
+ {{/if}}
+
+
+
+
+ Shuttle Control:
+
+
+ {{:helper.link('Call Shuttle', 'circle-triangle-e', data.send, data.moving || data.at_station || !data.can_launch ? 'disabled' : '')}}
+ {{:helper.link('Return Shuttle', 'circle-triangle-w', data.send, data.moving || !data.at_station || !data.can_launch ? 'disabled' : '')}}
+
+ {{:helper.link('Force Shuttle', 'alert', {'force_send' : 1}, !data.can_force ? 'disabled' : '')}}
+ {{:helper.link('Cancel Shuttle', 'cancel', {'cancel_send' : 1}, !data.can_force ? 'disabled' : '')}}
+
+
+
+
+ Supply Crates
+
+
+
+
+ {{if !data.contents}}
+ {{for data.supply_packs}}
+
+
+
{{:helper.link(value.name, null, value.command1)}}
+ {{:helper.link('#', null, value.command2, null)}}
+ {{:helper.link('C', null, value.command3, null)}}
{{:value.cost}} points
+
+
+ {{/for}}
+ {{else}}
+ {{:helper.link('Return', 'arrow-1-w', {'contents' : 1})}}
+
+ Contents of {{:data.contents_name}}
+
+ {{:data.contents}}
+ {{/if}}
+
+
+
+
+
+
+ Categories
+
+ {{for data.categories}}
+
+ {{:helper.link(value.name, 'gear', {'last_viewed_group':value.category}, (data.last_viewed_group==value.category) ? 'linkOn' : '', null, 'category')}}
+
+ {{/for}}
+
+
+
+ Supply Orders
+
+
+
+
+
Requests
+
+ {{for data.requests}}
+
+ #{{:value.ordernum}} - {{:value.supply_type}} for {{:value.orderedby}}
+
+ {{:value.comment}}
+
+ {{:helper.link('APPROVE', null, value.command1, null)}} {{:helper.link('REJECT', null, value.command2, null)}}
+
+ {{empty}}
+ No active requests.
+ {{/for}}
+
+
Orders
+
+ {{for data.orders}}
+
+ #{{:value.ordernum}} - {{:value.supply_type}} for {{:value.orderedby}}
+
+ {{empty}}
+ No confirmed orders.
+ {{/for}}
+
+
+
+
\ No newline at end of file