Ports export reports (#5051)

* Ports export reports

* Absolute pathing, small touchups
This commit is contained in:
Anewbe
2018-03-21 01:39:06 -05:00
committed by Atermonera
parent 7e98799753
commit ebeb513b31
2 changed files with 275 additions and 244 deletions

View File

@@ -40,6 +40,7 @@
<BR>\n<A href='?src=\ref[src];order=categories'>Request items</A><BR><BR> <BR>\n<A href='?src=\ref[src];order=categories'>Request items</A><BR><BR>
<A href='?src=\ref[src];vieworders=1'>View approved orders</A><BR><BR> <A href='?src=\ref[src];vieworders=1'>View approved orders</A><BR><BR>
<A href='?src=\ref[src];viewrequests=1'>View requests</A><BR><BR> <A href='?src=\ref[src];viewrequests=1'>View requests</A><BR><BR>
\n<A href='?src=\ref[src];viewexport=1'>View export report</A><BR><BR>
<A href='?src=\ref[user];mach_close=computer'>Close</A>"} <A href='?src=\ref[user];mach_close=computer'>Close</A>"}
user << browse(dat, "window=computer;size=575x450") user << browse(dat, "window=computer;size=575x450")
@@ -198,6 +199,7 @@
\n<A href='?src=\ref[src];order=categories'>Order items</A><BR>\n<BR> \n<A href='?src=\ref[src];order=categories'>Order items</A><BR>\n<BR>
\n<A href='?src=\ref[src];viewrequests=1'>View requests</A><BR>\n<BR> \n<A href='?src=\ref[src];viewrequests=1'>View requests</A><BR>\n<BR>
\n<A href='?src=\ref[src];vieworders=1'>View orders</A><BR>\n<BR> \n<A href='?src=\ref[src];vieworders=1'>View orders</A><BR>\n<BR>
\n<A href='?src=\ref[src];viewexport=1'>View export report</A><BR>\n<BR>
\n<A href='?src=\ref[user];mach_close=computer'>Close</A>"} \n<A href='?src=\ref[user];mach_close=computer'>Close</A>"}
@@ -367,6 +369,18 @@
temp += "<BR><A href='?src=\ref[src];clearreq=1'>Clear list</A>" temp += "<BR><A href='?src=\ref[src];clearreq=1'>Clear list</A>"
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>" temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
else if (href_list["viewexport"])
temp = "Previous shuttle export report: <BR><BR>"
var/cratecount = 0
var/totalvalue = 0
for(var/S in supply_controller.exported_crates)
var/datum/exported_crate/EC = S
cratecount += 1
totalvalue += EC.value
temp += "[EC.name] exported for [EC.value] supply points<BR>"
temp += "<BR>Shipment of [cratecount] crates exported for [totalvalue] supply points.<BR>"
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
else if (href_list["rreq"]) else if (href_list["rreq"])
var/ordernum = text2num(href_list["rreq"]) var/ordernum = text2num(href_list["rreq"])
temp = "Invalid Request.<BR>" temp = "Invalid Request.<BR>"

View File

@@ -1,8 +1,8 @@
//Config stuff //Config stuff
#define SUPPLY_DOCKZ 2 //Z-level of the Dock. #define SUPPLY_DOCKZ 2 //Z-level of the Dock.
#define SUPPLY_STATIONZ 1 //Z-level of the Station. #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_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 SUPPLY_DOCK_AREATYPE "/area/supply/dock" //Type of the supply shuttle area for dock
//Supply packs are in /code/defines/obj/supplypacks.dm //Supply packs are in /code/defines/obj/supplypacks.dm
//Computers are in /code/game/machinery/computer/supply.dm //Computers are in /code/game/machinery/computer/supply.dm
@@ -10,306 +10,323 @@
var/datum/controller/supply/supply_controller = new() var/datum/controller/supply/supply_controller = new()
var/list/mechtoys = list( var/list/mechtoys = list(
/obj/item/toy/prize/ripley, /obj/item/toy/prize/ripley,
/obj/item/toy/prize/fireripley, /obj/item/toy/prize/fireripley,
/obj/item/toy/prize/deathripley, /obj/item/toy/prize/deathripley,
/obj/item/toy/prize/gygax, /obj/item/toy/prize/gygax,
/obj/item/toy/prize/durand, /obj/item/toy/prize/durand,
/obj/item/toy/prize/honk, /obj/item/toy/prize/honk,
/obj/item/toy/prize/marauder, /obj/item/toy/prize/marauder,
/obj/item/toy/prize/seraph, /obj/item/toy/prize/seraph,
/obj/item/toy/prize/mauler, /obj/item/toy/prize/mauler,
/obj/item/toy/prize/odysseus, /obj/item/toy/prize/odysseus,
/obj/item/toy/prize/phazon /obj/item/toy/prize/phazon
) )
/obj/item/weapon/paper/manifest /obj/item/weapon/paper/manifest
name = "supply manifest" name = "supply manifest"
var/is_copy = 1 var/is_copy = 1
/area/supply/station /area/supply/station
name = "Supply Shuttle" name = "Supply Shuttle"
icon_state = "shuttle3" icon_state = "shuttle3"
requires_power = 0 requires_power = 0
base_turf = /turf/space base_turf = /turf/space
/area/supply/dock /area/supply/dock
name = "Supply Shuttle" name = "Supply Shuttle"
icon_state = "shuttle3" icon_state = "shuttle3"
requires_power = 0 requires_power = 0
base_turf = /turf/space base_turf = /turf/space
/obj/structure/plasticflaps //HOW DO YOU CALL THOSE THINGS ANYWAY /obj/structure/plasticflaps //HOW DO YOU CALL THOSE THINGS ANYWAY
name = "\improper plastic flaps" name = "\improper plastic flaps"
desc = "Completely impassable - or are they?" desc = "Completely impassable - or are they?"
icon = 'icons/obj/stationobjs.dmi' //Change this. icon = 'icons/obj/stationobjs.dmi' //Change this.
icon_state = "plasticflaps" icon_state = "plasticflaps"
density = 0 density = 0
anchored = 1 anchored = 1
layer = 4 layer = 4
explosion_resistance = 5 explosion_resistance = 5
var/list/mobs_can_pass = list( var/list/mobs_can_pass = list(
/mob/living/bot, /mob/living/bot,
/mob/living/simple_animal/slime, /mob/living/simple_animal/slime,
/mob/living/simple_animal/mouse, /mob/living/simple_animal/mouse,
/mob/living/silicon/robot/drone /mob/living/silicon/robot/drone
) )
/obj/structure/plasticflaps/attackby(obj/item/P, mob/user) /obj/structure/plasticflaps/attackby(obj/item/P, mob/user)
if(istype(P, /obj/item/weapon/wirecutters)) if(istype(P, /obj/item/weapon/wirecutters))
playsound(src, P.usesound, 50, 1) playsound(src, P.usesound, 50, 1)
user << "<span class='notice'>You start to cut the plastic flaps.</span>" user << "<span class='notice'>You start to cut the plastic flaps.</span>"
if(do_after(user, 10 * P.toolspeed)) if(do_after(user, 10 * P.toolspeed))
user << "<span class='notice'>You cut the plastic flaps.</span>" user << "<span class='notice'>You cut the plastic flaps.</span>"
var/obj/item/stack/material/plastic/A = new /obj/item/stack/material/plastic( src.loc ) var/obj/item/stack/material/plastic/A = new /obj/item/stack/material/plastic( src.loc )
A.amount = 4 A.amount = 4
qdel(src) qdel(src)
return return
else else
return return
/obj/structure/plasticflaps/CanPass(atom/A, turf/T) /obj/structure/plasticflaps/CanPass(atom/A, turf/T)
if(istype(A) && A.checkpass(PASSGLASS)) if(istype(A) && A.checkpass(PASSGLASS))
return prob(60) return prob(60)
var/obj/structure/bed/B = A var/obj/structure/bed/B = A
if (istype(A, /obj/structure/bed) && B.has_buckled_mobs())//if it's a bed/chair and someone is buckled, it will not pass if (istype(A, /obj/structure/bed) && B.has_buckled_mobs())//if it's a bed/chair and someone is buckled, it will not pass
return 0 return 0
if(istype(A, /obj/vehicle)) //no vehicles if(istype(A, /obj/vehicle)) //no vehicles
return 0 return 0
var/mob/living/M = A var/mob/living/M = A
if(istype(M)) if(istype(M))
if(M.lying) if(M.lying)
return ..() return ..()
for(var/mob_type in mobs_can_pass) for(var/mob_type in mobs_can_pass)
if(istype(A, mob_type)) if(istype(A, mob_type))
return ..() return ..()
return issmall(M) return issmall(M)
return ..() return ..()
/obj/structure/plasticflaps/ex_act(severity) /obj/structure/plasticflaps/ex_act(severity)
switch(severity) switch(severity)
if (1) if (1)
qdel(src) qdel(src)
if (2) if (2)
if (prob(50)) if (prob(50))
qdel(src) qdel(src)
if (3) if (3)
if (prob(5)) if (prob(5))
qdel(src) qdel(src)
/obj/structure/plasticflaps/mining //A specific type for mining that doesn't allow airflow because of them damn crates /obj/structure/plasticflaps/mining //A specific type for mining that doesn't allow airflow because of them damn crates
name = "airtight plastic flaps" name = "airtight plastic flaps"
desc = "Heavy duty, airtight, plastic flaps." desc = "Heavy duty, airtight, plastic flaps."
New() //set the turf below the flaps to block air /obj/structure/plasticflaps/mining/New() //set the turf below the flaps to block air
var/turf/T = get_turf(loc) var/turf/T = get_turf(loc)
if(T) if(T)
T.blocks_air = 1 T.blocks_air = 1
..() ..()
Destroy() //lazy hack to set the turf to allow air to pass if it's a simulated floor /obj/structure/plasticflaps/mining/Destroy() //lazy hack to set the turf to allow air to pass if it's a simulated floor
var/turf/T = get_turf(loc) var/turf/T = get_turf(loc)
if(T) if(T && istype(T, /turf/simulated/floor))
if(istype(T, /turf/simulated/floor)) T.blocks_air = 0
T.blocks_air = 0 ..()
..()
/* /*
/obj/effect/marker/supplymarker /obj/effect/marker/supplymarker
icon_state = "X" icon_state = "X"
icon = 'icons/misc/mark.dmi' icon = 'icons/misc/mark.dmi'
name = "X" name = "X"
invisibility = 101 invisibility = 101
anchored = 1 anchored = 1
opacity = 0 opacity = 0
*/ */
/datum/supply_order /datum/supply_order
var/ordernum var/ordernum
var/datum/supply_packs/object = null var/datum/supply_packs/object = null
var/orderedby = null var/orderedby = null
var/comment = null var/comment = null
/datum/exported_crate
var/name
var/value
/datum/controller/supply /datum/controller/supply
//supply points //supply points
var/points = 50 var/points = 50
var/points_per_process = 1.5 var/points_per_process = 1.5
var/points_per_slip = 2 var/points_per_slip = 2
var/points_per_platinum = 5 // 5 points per sheet var/points_per_platinum = 5 // 5 points per sheet
var/points_per_phoron = 5 var/points_per_phoron = 5
var/points_per_money = 0.02 var/points_per_money = 0.02
//control //control
var/ordernum var/ordernum
var/list/shoppinglist = list() var/list/shoppinglist = list()
var/list/requestlist = list() var/list/requestlist = list()
var/list/supply_packs = list() var/list/supply_packs = list()
//shuttle movement var/list/exported_crates = list()
var/movetime = 1200 //shuttle movement
var/datum/shuttle/ferry/supply/shuttle var/movetime = 1200
var/datum/shuttle/ferry/supply/shuttle
New() /datum/controller/supply/New()
ordernum = rand(1,9000) ordernum = rand(1,9000)
for(var/typepath in (typesof(/datum/supply_packs) - /datum/supply_packs)) for(var/typepath in (typesof(/datum/supply_packs) - /datum/supply_packs))
var/datum/supply_packs/P = new typepath() var/datum/supply_packs/P = new typepath()
supply_packs[P.name] = P supply_packs[P.name] = P
// Supply shuttle ticker - handles supply point regeneration // Supply shuttle ticker - handles supply point regeneration
// This is called by the process scheduler every thirty seconds // This is called by the process scheduler every thirty seconds
proc/process() /datum/controller/supply/proc/process()
points += points_per_process points += points_per_process
//To stop things being sent to CentCom which should not be sent to centcomm. Recursively checks for these types. //To stop things being sent to CentCom which should not be sent to centcomm. Recursively checks for these types.
proc/forbidden_atoms_check(atom/A) /datum/controller/supply/proc/forbidden_atoms_check(atom/A)
if(istype(A,/mob/living)) if(isliving(A))
return 1 return 1
if(istype(A,/obj/item/weapon/disk/nuclear)) if(istype(A,/obj/item/weapon/disk/nuclear))
return 1 return 1
if(istype(A,/obj/machinery/nuclearbomb)) if(istype(A,/obj/machinery/nuclearbomb))
return 1 return 1
if(istype(A,/obj/item/device/radio/beacon)) if(istype(A,/obj/item/device/radio/beacon))
return 1 return 1
for(var/i=1, i<=A.contents.len, i++) for(var/i=1, i<=A.contents.len, i++)
var/atom/B = A.contents[i] var/atom/B = A.contents[i]
if(.(B)) if(.(B))
return 1 return 1
//Sellin //Sellin
proc/sell() /datum/controller/supply/proc/sell()
var/area/area_shuttle = shuttle.get_location_area() var/area/area_shuttle = shuttle.get_location_area()
if(!area_shuttle) return if(!area_shuttle) return
callHook("sell_shuttle", list(area_shuttle)); callHook("sell_shuttle", list(area_shuttle));
var/phoron_count = 0 var/phoron_count = 0
var/plat_count = 0 var/plat_count = 0
var/money_count = 0 var/money_count = 0
for(var/atom/movable/MA in area_shuttle) exported_crates = list()
if(MA.anchored) continue
// Must be in a crate! for(var/atom/movable/MA in area_shuttle)
if(istype(MA,/obj/structure/closet/crate)) if(MA.anchored) continue
var/obj/structure/closet/crate/CR = MA
callHook("sell_crate", list(CR, area_shuttle))
points += CR.points_per_crate // Must be in a crate!
var/find_slip = 1 if(istype(MA,/obj/structure/closet/crate))
var/oldpoints = points
var/oldphoron = phoron_count
var/oldplatinum = plat_count
var/oldmoney = money_count
for(var/atom in CR) var/obj/structure/closet/crate/CR = MA
// Sell manifests callHook("sell_crate", list(CR, area_shuttle))
var/atom/A = atom
if(find_slip && istype(A,/obj/item/weapon/paper/manifest))
var/obj/item/weapon/paper/manifest/slip = A
if(!slip.is_copy && slip.stamped && slip.stamped.len) //yes, the clown stamp will work. clown is the highest authority on the station, it makes sense
points += points_per_slip
find_slip = 0
continue
// Sell phoron and platinum points += CR.points_per_crate
if(istype(A, /obj/item/stack)) var/find_slip = 1
var/obj/item/stack/P = A
switch(P.get_material_name())
if("phoron") phoron_count += P.get_amount()
if("platinum") plat_count += P.get_amount()
//Sell spacebucks for(var/atom in CR)
if(istype(A, /obj/item/weapon/spacecash)) // Sell manifests
var/obj/item/weapon/spacecash/cashmoney = A var/atom/A = atom
money_count += cashmoney.worth if(find_slip && istype(A,/obj/item/weapon/paper/manifest))
qdel(MA) var/obj/item/weapon/paper/manifest/slip = A
if(!slip.is_copy && slip.stamped && slip.stamped.len) //yes, the clown stamp will work. clown is the highest authority on the station, it makes sense
points += points_per_slip
find_slip = 0
continue
if(phoron_count) // Sell phoron and platinum
points += phoron_count * points_per_phoron if(istype(A, /obj/item/stack))
var/obj/item/stack/P = A
switch(P.get_material_name())
if("phoron") phoron_count += P.get_amount()
if("platinum") plat_count += P.get_amount()
if(plat_count) //Sell spacebucks
points += plat_count * points_per_platinum if(istype(A, /obj/item/weapon/spacecash))
var/obj/item/weapon/spacecash/cashmoney = A
money_count += cashmoney.worth
if(money_count) var/datum/exported_crate/EC = new /datum/exported_crate()
points += money_count * points_per_money EC.name = CR.name
EC.value = points - oldpoints
EC.value += (phoron_count - oldphoron) * points_per_phoron
EC.value += (plat_count - oldplatinum) * points_per_platinum
EC.value += (money_count - oldmoney) * points_per_money
exported_crates += EC
//Buyin qdel(MA)
proc/buy()
if(!shoppinglist.len) return
var/orderedamount = shoppinglist.len points += phoron_count * points_per_phoron
points += plat_count * points_per_platinum
points += money_count * points_per_money
var/area/area_shuttle = shuttle.get_location_area() //Buyin
if(!area_shuttle) return /datum/controller/supply/proc/buy()
if(!shoppinglist.len)
return
var/list/clear_turfs = list() var/orderedamount = shoppinglist.len
for(var/turf/T in area_shuttle) var/area/area_shuttle = shuttle.get_location_area()
if(T.density) continue if(!area_shuttle)
var/contcount return
for(var/atom/A in T.contents)
if(!A.simulated)
continue
contcount++
if(contcount)
continue
clear_turfs += T
for(var/S in shoppinglist) var/list/clear_turfs = list()
if(!clear_turfs.len) break
var/i = rand(1,clear_turfs.len)
var/turf/pickedloc = clear_turfs[i]
clear_turfs.Cut(i,i+1)
shoppinglist -= S
var/datum/supply_order/SO = S for(var/turf/T in area_shuttle)
var/datum/supply_packs/SP = SO.object if(T.density)
continue
var/contcount
for(var/atom/A in T.contents)
if(!A.simulated)
continue
contcount++
if(contcount)
continue
clear_turfs += T
var/obj/A = new SP.containertype(pickedloc) for(var/S in shoppinglist)
A.name = "[SP.containername] [SO.comment ? "([SO.comment])":"" ]" if(!clear_turfs.len) break
var/i = rand(1,clear_turfs.len)
var/turf/pickedloc = clear_turfs[i]
clear_turfs.Cut(i,i+1)
shoppinglist -= S
//supply manifest generation begin var/datum/supply_order/SO = S
var/datum/supply_packs/SP = SO.object
var/obj/item/weapon/paper/manifest/slip var/obj/A = new SP.containertype(pickedloc)
if(!SP.contraband) A.name = "[SP.containername] [SO.comment ? "([SO.comment])":"" ]"
slip = new /obj/item/weapon/paper/manifest(A)
slip.is_copy = 0
slip.info = "<h3>[command_name()] Shipping Manifest</h3><hr><br>"
slip.info +="Order #[SO.ordernum]<br>"
slip.info +="Destination: [station_name()]<br>"
slip.info +="[orderedamount] PACKAGES IN THIS SHIPMENT<br>"
slip.info +="CONTENTS:<br><ul>"
//spawn the stuff, finish generating the manifest while you're at it //supply manifest generation begin
if(SP.access) var/obj/item/weapon/paper/manifest/slip
if(isnum(SP.access)) if(!SP.contraband)
A.req_access = list(SP.access) slip = new /obj/item/weapon/paper/manifest(A)
else if(islist(SP.access)) slip.is_copy = 0
var/list/L = SP.access // access var is a plain var, we need a list slip.info = "<h3>[command_name()] Shipping Manifest</h3><hr><br>"
A.req_access = L.Copy() slip.info +="Order #[SO.ordernum]<br>"
else slip.info +="Destination: [station_name()]<br>"
world << "<span class='danger'>Supply pack with invalid access restriction [SP.access] encountered!</span>" slip.info +="[orderedamount] PACKAGES IN THIS SHIPMENT<br>"
slip.info +="CONTENTS:<br><ul>"
var/list/contains //spawn the stuff, finish generating the manifest while you're at it
if(istype(SP,/datum/supply_packs/randomised)) if(SP.access)
var/datum/supply_packs/randomised/SPR = SP if(isnum(SP.access))
contains = list() A.req_access = list(SP.access)
if(SPR.contains.len) else if(islist(SP.access))
for(var/j=1,j<=SPR.num_contained,j++) var/list/L = SP.access // access var is a plain var, we need a list
contains += pick(SPR.contains) A.req_access = L.Copy()
else else
contains = SP.contains log_debug("<span class='danger'>Supply pack with invalid access restriction [SP.access] encountered!</span>")
for(var/typepath in contains) var/list/contains
if(!typepath) continue if(istype(SP,/datum/supply_packs/randomised))
var/number_of_items = max(1, contains[typepath]) var/datum/supply_packs/randomised/SPR = SP
for(var/j = 1 to number_of_items) contains = list()
var/atom/B2 = new typepath(A) if(SPR.contains.len)
if(slip) slip.info += "<li>[B2.name]</li>" //add the item to the manifest for(var/j=1,j<=SPR.num_contained,j++)
contains += pick(SPR.contains)
else
contains = SP.contains
//manifest finalisation for(var/typepath in contains)
if(slip) if(!typepath) continue
slip.info += "</ul><br>" var/number_of_items = max(1, contains[typepath])
slip.info += "CHECK CONTENTS AND STAMP BELOW THE LINE TO CONFIRM RECEIPT OF GOODS<hr>" for(var/j = 1 to number_of_items)
var/atom/B2 = new typepath(A)
if(slip) slip.info += "<li>[B2.name]</li>" //add the item to the manifest
return //manifest finalisation
if(slip)
slip.info += "</ul><br>"
slip.info += "CHECK CONTENTS AND STAMP BELOW THE LINE TO CONFIRM RECEIPT OF GOODS<hr>"
return