From ae8829cabec63fa5a2b72b8d1a839dd92f33aeb0 Mon Sep 17 00:00:00 2001 From: Amunak Date: Wed, 17 Dec 2014 12:53:18 +0100 Subject: [PATCH] Moved supply computers to a separate file in machinery/computer/. Renamed supply shuttle console to supply control console and properly de-capitalized both console names. --- baystation12.dme | 1 + code/game/machinery/computer/supply.dm | 416 ++++++++++++++++++++++++ code/game/supplyshuttle.dm | 434 +------------------------ 3 files changed, 424 insertions(+), 427 deletions(-) create mode 100644 code/game/machinery/computer/supply.dm diff --git a/baystation12.dme b/baystation12.dme index 46381879bb6..905aa258fee 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -395,6 +395,7 @@ #include "code\game\machinery\computer\skills.dm" #include "code\game\machinery\computer\specops_shuttle.dm" #include "code\game\machinery\computer\station_alert.dm" +#include "code\game\machinery\computer\supply.dm" #include "code\game\machinery\computer\syndicate_specops_shuttle.dm" #include "code\game\machinery\doors\airlock.dm" #include "code\game\machinery\doors\airlock_control.dm" diff --git a/code/game/machinery/computer/supply.dm b/code/game/machinery/computer/supply.dm new file mode 100644 index 00000000000..fe109c47719 --- /dev/null +++ b/code/game/machinery/computer/supply.dm @@ -0,0 +1,416 @@ +/obj/machinery/computer/supplycomp + name = "supply control console" + icon = 'icons/obj/computer.dmi' + icon_state = "supply" + req_access = list(access_cargo) + 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" + +/obj/machinery/computer/ordercomp + name = "supply ordering console" + icon = 'icons/obj/computer.dmi' + icon_state = "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) + +/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") + return + +/obj/machinery/computer/ordercomp/Topic(href, href_list) + if(..()) + return + + 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 = copytext(sanitize(input(usr,"Reason:","Why do you require this item?","") as null|text),1,MAX_MESSAGE_LEN) + 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: [replacetext(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 << "\red 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") + return + +/obj/machinery/computer/supplycomp/attackby(I as obj, user as mob) + if(istype(I,/obj/item/weapon/card/emag) && !hacked) + user << "\blue Special supplies unlocked." + hacked = 1 + return + else + ..() + return + +/obj/machinery/computer/supplycomp/Topic(href, href_list) + if(!supply_controller) + world.log << "## ERROR: Eek. The supply_controller controller datum is missing somehow." + return + var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle + if (!shuttle) + world.log << "## 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 + 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") + + if (href_list["force_send"]) + shuttle.force_launch(src) + + 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/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 && !hacked) || (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 + + /*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["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 = copytext(sanitize(input(usr,"Reason:","Why do you require this item?","") as null|text),1,MAX_MESSAGE_LEN) + 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: [replacetext(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 = "Order request placed.
" + temp += "
Back | Main Menu | Authorize Order" + + 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 + + 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 + + add_fingerprint(usr) + updateUsrDialog() + return + +/obj/machinery/computer/supplycomp/proc/post_signal(var/command) + + var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435) + + if(!frequency) return + + var/datum/signal/status_signal = new + status_signal.source = src + status_signal.transmission_method = 1 + status_signal.data["command"] = command + + frequency.post_signal(src, status_signal) diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index 0564cde442c..81ad18ee5d4 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -4,6 +4,9 @@ #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 +//Supply packs are in /code/defines/obj/supplypacks.dm +//Computers are in /code/game/machinery/computer/supply.dm + var/datum/controller/supply/supply_controller = new() var/list/mechtoys = list( @@ -20,6 +23,9 @@ var/list/mechtoys = list( /obj/item/toy/prize/phazon ) +/obj/item/weapon/paper/manifest + name = "supply manifest" + /area/supply/station //DO NOT TURN THE lighting_use_dynamic STUFF ON FOR SHUTTLES. IT BREAKS THINGS. name = "Supply Shuttle" icon_state = "shuttle3" @@ -34,8 +40,6 @@ var/list/mechtoys = list( lighting_use_dynamic = 0 requires_power = 0 -//SUPPLY PACKS MOVED TO /code/defines/obj/supplypacks.dm - /obj/structure/plasticflaps //HOW DO YOU CALL THOSE THINGS ANYWAY name = "\improper plastic flaps" desc = "Completely impassable - or are they?" @@ -75,7 +79,7 @@ var/list/mechtoys = list( del(src) /obj/structure/plasticflaps/mining //A specific type for mining that doesn't allow airflow because of them damn crates - name = "\improper Airtight plastic flaps" + name = "airtight plastic flaps" desc = "Heavy duty, airtight, plastic flaps." New() //set the turf below the flaps to block air @@ -91,27 +95,6 @@ var/list/mechtoys = list( T.blocks_air = 0 ..() -/obj/machinery/computer/supplycomp - name = "Supply Shuttle Console" - icon = 'icons/obj/computer.dmi' - icon_state = "supply" - req_access = list(access_cargo) - 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" - -/obj/machinery/computer/ordercomp - name = "Supply Ordering Console" - icon = 'icons/obj/computer.dmi' - icon_state = "request" - circuit = "/obj/item/weapon/circuitboard/ordercomp" - var/temp = null - var/reqtime = 0 //Cooldown for requisitions - Quarxink - var/last_viewed_group = "categories" - /* /obj/effect/marker/supplymarker icon_state = "X" @@ -290,406 +273,3 @@ var/list/mechtoys = list( shoppinglist.Cut() return - -/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") - return - -/obj/machinery/computer/ordercomp/Topic(href, href_list) - if(..()) - return - - 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 = copytext(sanitize(input(usr,"Reason:","Why do you require this item?","") as null|text),1,MAX_MESSAGE_LEN) - 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: [replacetext(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 << "\red 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") - return - -/obj/machinery/computer/supplycomp/attackby(I as obj, user as mob) - if(istype(I,/obj/item/weapon/card/emag) && !hacked) - user << "\blue Special supplies unlocked." - hacked = 1 - return - else - ..() - return - -/obj/machinery/computer/supplycomp/Topic(href, href_list) - if(!supply_controller) - world.log << "## ERROR: Eek. The supply_controller controller datum is missing somehow." - return - var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle - if (!shuttle) - world.log << "## 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 - 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") - - if (href_list["force_send"]) - shuttle.force_launch(src) - - 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/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 && !hacked) || (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 - - /*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["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 = copytext(sanitize(input(usr,"Reason:","Why do you require this item?","") as null|text),1,MAX_MESSAGE_LEN) - 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: [replacetext(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 = "Order request placed.
" - temp += "
Back | Main Menu | Authorize Order" - - 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 - - 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 - - add_fingerprint(usr) - updateUsrDialog() - return - -/obj/machinery/computer/supplycomp/proc/post_signal(var/command) - - var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435) - - if(!frequency) return - - var/datum/signal/status_signal = new - status_signal.source = src - status_signal.transmission_method = 1 - status_signal.data["command"] = command - - frequency.post_signal(src, status_signal) - - - -