//Config stuff #define SUPPLY_DOCKZ 2 //Z-level of the Dock. #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 var/global/datum/controller/supply_shuttle/supply_shuttle /area/supply/station //DO NOT TURN THE lighting_use_dynamic STUFF ON FOR SHUTTLES. IT BREAKS THINGS. name = "supply shuttle" icon_state = "shuttle3" luminosity = 1 lighting_use_dynamic = 0 requires_power = 0 /area/supply/dock //DO NOT TURN THE lighting_use_dynamic STUFF ON FOR SHUTTLES. IT BREAKS THINGS. name = "supply shuttle" icon_state = "shuttle3" luminosity = 1 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 = "plastic flaps" desc = "Definitely can't get past those. No way." icon = 'icons/obj/stationobjs.dmi' //Change this. icon_state = "plasticflaps" density = 0 anchored = 1 layer = 4 explosion_resistance = 5 /obj/structure/plasticflaps/CanPass(atom/A, turf/T) if(istype(A) && A.checkpass(PASSGLASS)) return prob(60) var/obj/structure/stool/bed/B = A if (istype(A, /obj/structure/stool/bed) && B.buckled_mob)//if it's a bed/chair and someone is buckled, it will not pass return 0 else if(istype(A, /mob/living)) // You Shall Not Pass! var/mob/living/M = A if(!M.lying && !istype(M, /mob/living/carbon/monkey) && !istype(M, /mob/living/carbon/slime)) //If your not laying down, or a small creature, no pass. return 0 return ..() /obj/structure/plasticflaps/ex_act(severity) switch(severity) if (1) del(src) if (2) if (prob(50)) del(src) if (3) if (prob(5)) del(src) /obj/structure/plasticflaps/mining //A specific type for mining that doesn't allow airflow because of them damn crates name = "airtight plastic flaps" desc = "Heavy duty, airtight, plastic flaps." New() //set the turf below the flaps to block air var/turf/T = get_turf(loc) if(T) T.blocks_air = 1 ..() Del() //lazy hack to set the turf to allow air to pass if it's a simulated floor var/turf/T = get_turf(loc) if(T) if(istype(T, /turf/simulated/floor)) 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" icon = 'icons/misc/mark.dmi' name = "X" invisibility = 101 anchored = 1 opacity = 0 */ /datum/supply_order var/ordernum var/datum/supply_packs/object = null var/orderedby = null var/comment = null /datum/controller/supply_shuttle var/processing = 1 var/processing_interval = 300 var/iteration = 0 //supply points var/points = 50 var/points_per_process = 1 var/points_per_slip = 2 var/points_per_crate = 5 var/plasma_per_point = 5 // 2 plasma for 1 point var/centcom_message = "" // Remarks from Centcom on how well you checked the last order. // Unique typepaths for unusual things we've already sent CentComm, associated with their potencies var/list/discoveredPlants = list() //control var/ordernum var/list/shoppinglist = list() var/list/requestlist = list() var/list/supply_packs = list() //shuttle movement var/at_station = 0 var/movetime = 1200 var/moving = 0 var/eta_timeofday var/eta //shuttle loan var/datum/round_event/shuttle_loan/shuttle_loan New() ordernum = rand(1,9000) for(var/typepath in (typesof(/datum/supply_packs) - /datum/supply_packs)) var/datum/supply_packs/P = new typepath() if(P.name == "HEADER") continue // To filter out group headers supply_packs[P.name] = P //Supply shuttle ticker - handles supply point regenertion and shuttle travelling between centcom and the station proc/process() spawn(0) set background = BACKGROUND_ENABLED while(1) if(processing) iteration++ points += points_per_process if(moving == 1) var/ticksleft = (eta_timeofday - world.timeofday) if(ticksleft > 0) eta = round(ticksleft/600,1) else eta = 0 send() sleep(processing_interval) proc/send() var/area/from var/area/dest var/area/the_shuttles_way switch(at_station) if(1) from = locate(SUPPLY_STATION_AREATYPE) dest = locate(SUPPLY_DOCK_AREATYPE) the_shuttles_way = from at_station = 0 if(0) from = locate(SUPPLY_DOCK_AREATYPE) dest = locate(SUPPLY_STATION_AREATYPE) the_shuttles_way = dest at_station = 1 moving = 0 //Do I really need to explain this loop? for(var/mob/living/unlucky_person in the_shuttles_way) unlucky_person.gib() from.move_contents_to(dest) //Check whether the shuttle is allowed to move proc/can_move() if(moving) return 0 var/area/shuttle = locate(/area/supply/station) if(!shuttle) return 0 if(forbidden_atoms_check(shuttle)) return 0 return 1 //To stop things being sent to centcom which should not be sent to centcom Recursively checks for these types. proc/forbidden_atoms_check(atom/A) if(istype(A,/mob/living)) return 1 if(istype(A,/obj/item/weapon/disk/nuclear)) return 1 if(istype(A,/obj/machinery/nuclearbomb)) return 1 if(istype(A,/obj/item/device/radio/beacon)) return 1 for(var/i=1, i<=A.contents.len, i++) var/atom/B = A.contents[i] if(.(B)) return 1 //Sellin proc/sell() var/shuttle_at if(at_station) shuttle_at = SUPPLY_STATION_AREATYPE else shuttle_at = SUPPLY_DOCK_AREATYPE var/area/shuttle = locate(shuttle_at) if(!shuttle) return var/plasma_count = 0 var/crate_count = 0 centcom_message = "" for(var/atom/movable/MA in shuttle) if(MA.anchored) continue // Must be in a crate (or a critter crate)! if(istype(MA,/obj/structure/closet/crate) || istype(MA,/obj/structure/closet/critter)) crate_count++ var/find_slip = 1 for(var/atom in MA) // Sell manifests var/atom/A = atom if(find_slip && istype(A,/obj/item/weapon/paper/manifest)) var/obj/item/weapon/paper/manifest/slip = A // TODO: Check for a signature, too. if(slip.stamped && slip.stamped.len) //yes, the clown stamp will work. clown is the highest authority on the station, it makes sense // Did they mark it as erroneous? var/denied = 0 for(var/i=1,i<=slip.stamped.len,i++) if(slip.stamped[i] == /obj/item/weapon/stamp/denied) denied = 1 if(slip.erroneous && denied) // Caught a mistake by Centcom (IDEA: maybe Centcom rarely gets offended by this) points += slip.points-points_per_crate // For now, give a full refund for paying attention (minus the crate cost) centcom_message += "+[slip.points-points_per_crate]: Station correctly denied package [slip.ordernumber]: " if(slip.erroneous & MANIFEST_ERROR_NAME) centcom_message += "Destination station incorrect. " else if(slip.erroneous & MANIFEST_ERROR_COUNT) centcom_message += "Packages incorrectly counted. " else if(slip.erroneous & MANIFEST_ERROR_ITEM) centcom_message += "Package incomplete. " centcom_message += "Points refunded.
" else if(!slip.erroneous && !denied) // Approving a proper order awards the relatively tiny points_per_slip points += points_per_slip centcom_message += "+1: Package [slip.ordernumber] accorded.
" else // You done goofed. if(slip.erroneous) centcom_message += "+0: Station approved package [slip.ordernumber] despite error: " if(slip.erroneous & MANIFEST_ERROR_NAME) centcom_message += "Destination station incorrect." else if(slip.erroneous & MANIFEST_ERROR_COUNT) centcom_message += "Packages incorrectly counted." else if(slip.erroneous & MANIFEST_ERROR_ITEM) centcom_message += "We found unshipped items on our dock." centcom_message += " Be more vigilant.
" else points -= slip.points-points_per_crate centcom_message += "-[slip.points-points_per_crate]: Station denied package [slip.ordernumber]. Our records show no fault on our part.
" find_slip = 0 continue // Sell plasma if(istype(A, /obj/item/stack/sheet/mineral/plasma)) var/obj/item/stack/sheet/mineral/plasma/P = A plasma_count += P.amount if(istype(A, /obj/item/seeds)) var/obj/item/seeds/S = A if(S.rarity == 0) // Mundane species centcom_message += "+0: We don't need samples of mundane species \"[capitalize(S.species)]\".
" else if(discoveredPlants[S.type]) // This species has already been sent to CentComm var/potDiff = S.potency - discoveredPlants[S.type] // Compare it to the previous best if(potDiff > 0) // This sample is better discoveredPlants[S.type] = S.potency centcom_message += "+[potDiff]: New sample of \"[capitalize(S.species)]\" is superior. Good work.
" points += potDiff else // This sample is worthless centcom_message += "+0: New sample of \"[capitalize(S.species)]\" is not more potent than existing sample ([discoveredPlants[S.type]] potency).
" else // This is a new discovery! discoveredPlants[S.type] = S.potency centcom_message += "+[S.rarity]: New species discovered: \"[capitalize(S.species)]\". Excellent work.
" points += S.rarity // That's right, no bonus for potency. Send a crappy sample first to "show improvement" later del(MA) if(plasma_count) centcom_message += "+[round(plasma_count/plasma_per_point)]: Received [plasma_count] units of exotic material.
" points += round(plasma_count / plasma_per_point) if(crate_count) centcom_message += "+[round(crate_count*points_per_crate)]: Received [crate_count] crates.
" points += crate_count * points_per_crate //Buyin proc/buy() if(!shoppinglist.len) return var/shuttle_at if(at_station) shuttle_at = SUPPLY_STATION_AREATYPE else shuttle_at = SUPPLY_DOCK_AREATYPE var/area/shuttle = locate(shuttle_at) if(!shuttle) return var/list/clear_turfs = list() for(var/turf/T in shuttle) if(T.density || T.contents.len) continue clear_turfs += T for(var/S 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) var/datum/supply_order/SO = S var/datum/supply_packs/SP = SO.object var/atom/A = new SP.containertype(pickedloc) A.name = "[SP.containername] [SO.comment ? "([SO.comment])":"" ]" //supply manifest generation begin var/obj/item/weapon/paper/manifest/slip = new /obj/item/weapon/paper/manifest(A) var printed_station_name = world.name // World name is available in the title bar, station_name can be different based on config. if(prob(5)) printed_station_name = new_station_name() slip.erroneous |= MANIFEST_ERROR_NAME // They got our station name wrong. BASTARDS! // IDEA: Have Centcom accidentally send random low-value crates in large orders, give large bonus for returning them intact. var printed_packages_amount = supply_shuttle.shoppinglist.len if(prob(5)) printed_packages_amount += rand(1,2) // I considered rand(-2,2), but that could be zero. Heh. slip.erroneous |= MANIFEST_ERROR_COUNT // They typoed the number of crates in this shipment. It won't match the other manifests. slip.points = SP.cost slip.ordernumber = SO.ordernum slip.info = "

[command_name()] Shipping Manifest



" slip.info +="Order #[SO.ordernum]
" slip.info +="Destination: [printed_station_name]
" slip.info +="[printed_packages_amount] PACKAGES IN THIS SHIPMENT
" slip.info +="CONTENTS:

" slip.info += "CHECK CONTENTS AND STAMP BELOW THE LINE TO CONFIRM RECEIPT OF GOODS
" // And now this is actually meaningful. supply_shuttle.shoppinglist.Cut() return /obj/item/weapon/paper/manifest name = "supply manifest" var/erroneous = 0 var/points = 0 var/ordernumber = 0 /obj/machinery/computer/ordercomp/attack_hand(var/mob/user as mob) if(..()) return user.set_machine(src) var/dat if(temp) dat = temp else dat += {"Shuttle Location: [supply_shuttle.moving ? "Moving to station ([supply_shuttle.eta] Mins.)":supply_shuttle.at_station ? "Station":"Dock"]

Supply Points: [supply_shuttle.points]

\nRequest items

View approved orders

View requests

Close"} // Removing the old window method but leaving it here for reference //user << browse(dat, "window=computer;size=575x450") //onclose(user, "computer") // Added the new browser window method var/datum/browser/popup = new(user, "computer", "Supply Ordering Console", 575, 450) popup.set_content(dat) popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) popup.open() 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_shuttle.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_shuttle.points]
" temp += "Back to all categories


" temp += "Request from: [get_supply_group_name(cat)]

" for(var/supply_name in supply_shuttle.supply_packs ) var/datum/supply_packs/N = supply_shuttle.supply_packs[supply_name] if(N.hidden || N.contraband || N.group != cat) 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_shuttle.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_shuttle.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_shuttle.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_shuttle.ordernum O.object = P O.orderedby = idname supply_shuttle.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 = "Main Menu

Current approved orders:

" 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])":""]
" temp += "
Main Menu" else if (href_list["viewrequests"]) temp = "Main Menu

Current requests:

" for(var/S in supply_shuttle.requestlist) var/datum/supply_order/SO = S temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby]
" temp += "
Main Menu" 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 dat += {"
Supply shuttle
\nLocation: [supply_shuttle.moving ? "Moving to station ([supply_shuttle.eta] Mins.)":supply_shuttle.at_station ? "Station":"Away"]

\nSupply Points: [supply_shuttle.points]
\n
[supply_shuttle.moving ? "\n*Must be away to order items*
\n
":supply_shuttle.at_station ? "\n*Must be away to order items*
\n
":"\nOrder items
\n
"] [supply_shuttle.moving ? "\n*Shuttle already called*
\n
":supply_shuttle.at_station ? "\nSend away
\n
":"\nSend to station
\n
"] [supply_shuttle.shuttle_loan ? (supply_shuttle.shuttle_loan.dispatched ? "\n*Shuttle loaned to Centcom*
\n
" : "\nLoan shuttle to Centcom (5 mins duration)
\n
") : "\n*No pending external shuttle requests*
\n
"] \nView requests
\n
\nView orders
\n
\nClose

\nCentral Command messages
[supply_shuttle.centcom_message ? supply_shuttle.centcom_message : "Remember to stamp and send back the supply manifests."]"} user << browse(dat, "window=computer;size=700x450") 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 << " Special supplies unlocked." hacked = 1 return else ..() return /obj/machinery/computer/supplycomp/Topic(href, href_list) if(!supply_shuttle) world.log << "## ERROR: Eek. The supply_shuttle controller 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(!supply_shuttle.can_move()) if(supply_shuttle.shuttle_loan) temp = "The supply shuttle must be docked to send new commands.

Main Menu" else temp = "For safety reasons the automated supply shuttle cannot transport live organisms, classified nuclear weaponry or homing beacons.

Main Menu" else if(supply_shuttle.at_station) if(href_list["loan"] && supply_shuttle.shuttle_loan) if(!supply_shuttle.shuttle_loan.dispatched) supply_shuttle.sell() supply_shuttle.send() supply_shuttle.shuttle_loan.loan_shuttle() temp = "The supply shuttle has been loaned to Centcom.

Main Menu" post_signal("supply") else temp = "You can not loan the supply shuttle at this time.

Main Menu" else temp = "The supply shuttle has departed.

Main Menu" supply_shuttle.moving = -1 supply_shuttle.sell() supply_shuttle.send() else if(href_list["loan"] && supply_shuttle.shuttle_loan) if(!supply_shuttle.shuttle_loan.dispatched) supply_shuttle.shuttle_loan.loan_shuttle() temp = "The supply shuttle has been loaned to Centcom.

Main Menu" post_signal("supply") else temp = "You can not loan the supply shuttle at this time.

Main Menu" else supply_shuttle.buy() temp = "The supply shuttle has been called and will arrive in [round(supply_shuttle.movetime/600,1)] minutes.

Main Menu" supply_shuttle.moving = 1 supply_shuttle.eta_timeofday = (world.timeofday + supply_shuttle.movetime) % 864000 post_signal("supply") else if (href_list["order"]) if(supply_shuttle.moving) return if(href_list["order"] == "categories") //all_supply_groups //Request what? last_viewed_group = "categories" temp = "Supply points: [supply_shuttle.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_shuttle.points]
" temp += "Back to all categories


" temp += "Request from: [get_supply_group_name(cat)]

" for(var/supply_name in supply_shuttle.supply_packs ) var/datum/supply_packs/N = supply_shuttle.supply_packs[supply_name] if((N.hidden && !hacked) || (N.contraband && !can_order_contraband) || N.group != cat) 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_shuttle.points]


Request what?

" for(var/supply_name in supply_shuttle.supply_packs ) var/datum/supply_packs/N = supply_shuttle.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_shuttle.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_shuttle.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_shuttle.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_shuttle.ordernum O.object = P O.orderedby = idname supply_shuttle.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_shuttle.requestlist.len, i++) var/datum/supply_order/SO = supply_shuttle.requestlist[i] if(SO.ordernum == ordernum) O = SO P = O.object if(supply_shuttle.points >= P.cost) supply_shuttle.requestlist.Cut(i,i+1) supply_shuttle.points -= P.cost supply_shuttle.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 = "Main Menu

Current approved orders:

" for(var/S in supply_shuttle.shoppinglist) var/datum/supply_order/SO = S temp += "#[SO.ordernum] - [SO.object.name] approved by [SO.orderedby][SO.comment ? " ([SO.comment])":""]
"// (Cancel)
" temp += "
Main Menu" /* 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 += "
Main Menu" */ else if (href_list["viewrequests"]) temp = "Main Menu

Current requests:

" for(var/S in supply_shuttle.requestlist) var/datum/supply_order/SO = S temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby] [supply_shuttle.moving ? "":supply_shuttle.at_station ? "":"Approve Remove"]
" temp += "
Clear list" temp += "
Main Menu" else if (href_list["rreq"]) var/ordernum = text2num(href_list["rreq"]) temp = "Invalid Request.
" for(var/i=1, i<=supply_shuttle.requestlist.len, i++) var/datum/supply_order/SO = supply_shuttle.requestlist[i] if(SO.ordernum == ordernum) supply_shuttle.requestlist.Cut(i,i+1) temp = "Request removed.
" break temp += "
Back Main Menu" else if (href_list["clearreq"]) supply_shuttle.requestlist.Cut() temp = "List cleared.
" temp += "
Main Menu" 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)