Rewrite supply packs/cargo orders

This commit is contained in:
Bjorn Neergaard
2016-02-07 00:51:31 -06:00
parent ddab6823d3
commit 4ef2667ff2
17 changed files with 1997 additions and 818 deletions

View File

@@ -120,9 +120,11 @@
//some arbitrary defines to be used by self-pruning global lists. (see master_controller) //some arbitrary defines to be used by self-pruning global lists. (see master_controller)
#define PROCESS_KILL 26 //Used to trigger removal from a processing list #define PROCESS_KILL 26 //Used to trigger removal from a processing list
#define MANIFEST_ERROR_NAME 1 // Cargo-related stuff.
#define MANIFEST_ERROR_COUNT 2 #define MANIFEST_ERROR_CHANCE 5
#define MANIFEST_ERROR_ITEM 4 #define MANIFEST_ERROR_NAME 1
#define MANIFEST_ERROR_CONTENTS 2
#define MANIFEST_ERROR_ITEM 4
#define TRANSITIONEDGE 7 //Distance from edge to move to another z-level #define TRANSITIONEDGE 7 //Distance from edge to move to another z-level

View File

@@ -22,7 +22,7 @@ var/datum/subsystem/shuttle/SSshuttle
var/ordernum = 1 //order number given to next order var/ordernum = 1 //order number given to next order
var/points = 50 //number of trade-points we have var/points = 50 //number of trade-points we have
var/points_per_decisecond = 0.005 //points gained every decisecond var/points_per_decisecond = 0.005 //points gained every decisecond
var/points_per_slip = 2 //points gained per slip returned var/points_per_manifest = 2 //points gained per manifest returned
var/points_per_crate = 5 //points gained per crate returned var/points_per_crate = 5 //points gained per crate returned
var/points_per_intel = 250 //points gained per intel returned var/points_per_intel = 250 //points gained per intel returned
var/points_per_plasma = 5 //points gained per plasma returned var/points_per_plasma = 5 //points gained per plasma returned
@@ -31,9 +31,12 @@ var/datum/subsystem/shuttle/SSshuttle
var/list/discoveredPlants = list() //Typepaths for unusual plants we've already sent CentComm, associated with their potencies var/list/discoveredPlants = list() //Typepaths for unusual plants we've already sent CentComm, associated with their potencies
var/list/techLevels = list() var/list/techLevels = list()
var/list/researchDesigns = list() var/list/researchDesigns = list()
var/list/supply_packs = list()
var/list/shoppinglist = list() var/list/shoppinglist = list()
var/list/requestlist = list() var/list/requestlist = list()
var/list/supply_packs = list() var/list/orderhistory = list()
var/datum/round_event/shuttle_loan/shuttle_loan var/datum/round_event/shuttle_loan/shuttle_loan
var/sold_atoms = "" var/sold_atoms = ""
@@ -50,12 +53,14 @@ var/datum/subsystem/shuttle/SSshuttle
if(!supply) if(!supply)
WARNING("No /obj/docking_port/mobile/supply placed on the map!") WARNING("No /obj/docking_port/mobile/supply placed on the map!")
ordernum = rand(1,9000) ordernum = rand(1, 9000)
for(var/typepath in subtypesof(/datum/supply_packs)) for(var/pack in subtypesof(/datum/supply_pack))
var/datum/supply_packs/P = new typepath() var/datum/supply_pack/P = new pack()
if(P.name == "HEADER") continue // To filter out group headers if(!P.contains)
continue
supply_packs["[P.type]"] = P supply_packs["[P.type]"] = P
initial_move() initial_move()
..() ..()

File diff suppressed because it is too large Load Diff

View File

@@ -64,7 +64,7 @@ var/global/max_secret_rooms = 6
if("organharvest") if("organharvest")
walltypes = list(/turf/simulated/wall/r_wall=2,/turf/simulated/wall=2,/turf/simulated/mineral/random/high_chance=1) walltypes = list(/turf/simulated/wall/r_wall=2,/turf/simulated/wall=2,/turf/simulated/mineral/random/high_chance=1)
floortypes = list(/turf/simulated/floor/plasteel,/turf/simulated/floor/engine) floortypes = list(/turf/simulated/floor/plasteel,/turf/simulated/floor/engine)
treasureitems = list(/mob/living/simple_animal/bot/medbot/mysterious=1, /obj/item/weapon/circular_saw=1, /obj/structure/closet/crate/critter/cat=2) treasureitems = list(/mob/living/simple_animal/bot/medbot/mysterious=1, /obj/item/weapon/circular_saw=1, /obj/structure/closet/crate/critter=2)
fluffitems = list(/obj/effect/decal/cleanable/blood=5,/obj/item/organ/internal/appendix=2,/obj/structure/closet/crate/freezer=2, fluffitems = list(/obj/effect/decal/cleanable/blood=5,/obj/item/organ/internal/appendix=2,/obj/structure/closet/crate/freezer=2,
/obj/structure/table/optable=1,/obj/item/weapon/scalpel=1,/obj/item/weapon/storage/firstaid/regular=3, /obj/structure/table/optable=1,/obj/item/weapon/scalpel=1,/obj/item/weapon/storage/firstaid/regular=3,
/obj/item/weapon/tank/internals/anesthetic=1, /obj/item/weapon/surgical_drapes=2, /obj/item/device/mass_spectrometer/adv=1,/obj/item/clothing/glasses/hud/health=1) /obj/item/weapon/tank/internals/anesthetic=1, /obj/item/weapon/surgical_drapes=2, /obj/item/device/mass_spectrometer/adv=1,/obj/item/clothing/glasses/hud/health=1)

View File

@@ -501,13 +501,13 @@ Code:
menu += "<BR>Current approved orders: <BR><ol>" menu += "<BR>Current approved orders: <BR><ol>"
for(var/S in SSshuttle.shoppinglist) for(var/S in SSshuttle.shoppinglist)
var/datum/supply_order/SO = S var/datum/supply_order/SO = S
menu += "<li>#[SO.ordernum] - [SO.object.name] approved by [SO.orderedby] [SO.comment ? "([SO.comment])":""]</li>" menu += "<li>#[SO.id] - [SO.pack.name] approved by [SO.orderer] [SO.reason ? "([SO.reason])":""]</li>"
menu += "</ol>" menu += "</ol>"
menu += "Current requests: <BR><ol>" menu += "Current requests: <BR><ol>"
for(var/S in SSshuttle.requestlist) for(var/S in SSshuttle.requestlist)
var/datum/supply_order/SO = S var/datum/supply_order/SO = S
menu += "<li>#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby]</li>" menu += "<li>#[SO.id] - [SO.pack.name] requested by [SO.orderer]</li>"
menu += "</ol><font size=\"-3\">Upgrade NOW to Space Parts & Space Vendors PLUS for full remote order control and inventory management." menu += "</ol><font size=\"-3\">Upgrade NOW to Space Parts & Space Vendors PLUS for full remote order control and inventory management."
if (49) //janitorial locator if (49) //janitorial locator

View File

@@ -127,10 +127,7 @@
mobs_stored++ mobs_stored++
if(mobs_stored >= mob_storage_capacity) if(mobs_stored >= mob_storage_capacity)
return 0 return 0
<<<<<<< ede93b63a61fbdfe3be0fe9569aa29b152e767bc
L.reset_perspective(src) L.reset_perspective(src)
=======
>>>>>>> Fix up crates
L.stop_pulling() L.stop_pulling()
else if(!istype(AM, /obj/item) && !istype(AM, /obj/effect/dummy/chameleon)) else if(!istype(AM, /obj/item) && !istype(AM, /obj/effect/dummy/chameleon))
return 0 return 0
@@ -346,18 +343,13 @@
else else
togglelock(user) togglelock(user)
/obj/structure/closet/proc/togglelock(mob/user) /obj/structure/closet/proc/togglelock(mob/living/user)
if(secure && !broken) if(secure && !broken)
if(allowed(user)) if(allowed(user))
locked = !locked locked = !locked
add_fingerprint(user) add_fingerprint(user)
<<<<<<< ede93b63a61fbdfe3be0fe9569aa29b152e767bc user.visible_message("<span class='notice'>[user] [locked ? null : "un"]locks [src].</span>",
for(var/mob/O in viewers(user, 3))
O.show_message("<span class='notice'>[user] has [locked ? null : "un"]locked the locker.</span>", 1)
=======
visible_message("<span class='notice'>[user] [locked ? null : "un"]locks [src].</span>",
"<span class='notice'>You [locked ? null : "un"]locks [src].</span>") "<span class='notice'>You [locked ? null : "un"]locks [src].</span>")
>>>>>>> Fix up crates
update_icon() update_icon()
else else
user << "<span class='notice'>Access Denied</span>" user << "<span class='notice'>Access Denied</span>"
@@ -374,11 +366,10 @@
locked = 0 locked = 0
update_icon() update_icon()
<<<<<<< ede93b63a61fbdfe3be0fe9569aa29b152e767bc
/obj/structure/closet/get_remote_view_fullscreens(mob/user) /obj/structure/closet/get_remote_view_fullscreens(mob/user)
if(!(user.sight & (SEEOBJS|SEEMOBS))) if(!(user.sight & (SEEOBJS|SEEMOBS)))
user.overlay_fullscreen("remote_view", /obj/screen/fullscreen/impaired, 1) user.overlay_fullscreen("remote_view", /obj/screen/fullscreen/impaired, 1)
=======
/obj/structure/closet/emp_act(severity) /obj/structure/closet/emp_act(severity)
for(var/obj/O in src) for(var/obj/O in src)
O.emp_act(severity) O.emp_act(severity)
@@ -393,4 +384,3 @@
req_access = list() req_access = list()
req_access += pick(get_all_accesses()) req_access += pick(get_all_accesses())
..() ..()
>>>>>>> Fix up crates

View File

@@ -19,27 +19,3 @@
user << "<span class='notice'>It won't budge!</span>" user << "<span class='notice'>It won't budge!</span>"
else else
..() ..()
/obj/structure/closet/crate/critter/corgi/New()
..()
if(prob(50))
new /mob/living/simple_animal/pet/dog/corgi/Lisa(src)
else
new /mob/living/simple_animal/pet/dog/corgi(src)
/obj/structure/closet/crate/critter/cat/New()
..()
if(prob(50))
new /mob/living/simple_animal/pet/cat/Proc(src)
else
new /mob/living/simple_animal/pet/cat(src)
/obj/structure/closet/crate/critter/chick/New()
..()
for(var/i in 1 to rand(1, 3))
new /mob/living/simple_animal/chick(src)
/obj/structure/closet/crate/critter/butterfly/New()
..()
for(var/i in 1 to 50)
new /mob/living/simple_animal/butterfly(src)

View File

@@ -18,9 +18,10 @@
var/obj/item/weapon/circuitboard/cargo/board = circuit var/obj/item/weapon/circuitboard/cargo/board = circuit
contraband = board.contraband contraband = board.contraband
/obj/machinery/computer/cargo/emag_act(mob/user) /obj/machinery/computer/cargo/emag_act(mob/living/user)
if(!emagged) if(!emagged)
user << "<span class='notice'>Special supplies unlocked.</span>" user.visible_message("<span class='warning'>[user] swipes a suspicious card through [src]!",
"<span class='notice'>You emag [src], unlocking special supplies.</span>")
emagged = TRUE emagged = TRUE
/obj/machinery/computer/cargo/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ /obj/machinery/computer/cargo/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \
@@ -41,40 +42,38 @@
data["loan_dispatched"] = SSshuttle.shuttle_loan && SSshuttle.shuttle_loan.dispatched data["loan_dispatched"] = SSshuttle.shuttle_loan && SSshuttle.shuttle_loan.dispatched
data["message"] = SSshuttle.centcom_message || "Remember to stamp and send back the supply manifests." data["message"] = SSshuttle.centcom_message || "Remember to stamp and send back the supply manifests."
var/list/supplies = list() data["supplies"] = list()
supplies.len = all_supply_groups.len
for(var/group in all_supply_groups)
supplies[group] = list(
"name" = get_supply_group_name(group),
"packs" = list()
)
for(var/pack in SSshuttle.supply_packs) for(var/pack in SSshuttle.supply_packs)
var/datum/supply_packs/P = SSshuttle.supply_packs[pack] var/datum/supply_pack/P = SSshuttle.supply_packs[pack]
if(!data["supplies"][P.group])
data["supplies"][P.group] = list(
"name" = P.group,
"packs" = list()
)
if((P.hidden && !emagged) || (P.contraband && !contraband)) if((P.hidden && !emagged) || (P.contraband && !contraband))
continue continue
supplies[P.group]["packs"] += list(list( data["supplies"][P.group]["packs"] += list(list(
"name" = P.name, "name" = P.name,
"cost" = P.cost, "cost" = P.cost,
"id" = pack "id" = pack
)) ))
data["supplies"] = supplies
data["cart"] = list() data["cart"] = list()
for(var/datum/supply_order/SO in SSshuttle.shoppinglist) for(var/datum/supply_order/SO in SSshuttle.shoppinglist)
data["cart"] += list(list( data["cart"] += list(list(
"object" = SO.object.name, "object" = SO.pack.name,
"cost" = SO.object.cost, "cost" = SO.pack.cost,
"id" = SO.ordernum "id" = SO.id
)) ))
data["requests"] = list() data["requests"] = list()
for(var/datum/supply_order/SO in SSshuttle.requestlist) for(var/datum/supply_order/SO in SSshuttle.requestlist)
data["requests"] += list(list( data["requests"] += list(list(
"object" = SO.object.name, "object" = SO.pack.name,
"cost" = SO.object.cost, "cost" = SO.pack.cost,
"orderedby" = SO.orderedby, "orderer" = SO.orderer,
"comment" = SO.comment, "reason" = SO.reason,
"id" = SO.ordernum "id" = SO.id
)) ))
return data return data
@@ -127,7 +126,7 @@
return return
var/turf/T = get_turf(src) var/turf/T = get_turf(src)
var/datum/supply_order/SO = SSshuttle.generateSupplyOrder(id, name, rank, reason) var/datum/supply_order/SO = new(id, name, rank, reason)
SO.generateRequisition(T) SO.generateRequisition(T)
if(requestonly) if(requestonly)
SSshuttle.requestlist += SO SSshuttle.requestlist += SO
@@ -137,7 +136,7 @@
if("remove") if("remove")
var/id = text2num(params["id"]) var/id = text2num(params["id"])
for(var/datum/supply_order/SO in SSshuttle.shoppinglist) for(var/datum/supply_order/SO in SSshuttle.shoppinglist)
if(SO.ordernum == id) if(SO.id == id)
SSshuttle.shoppinglist -= SO SSshuttle.shoppinglist -= SO
. = TRUE . = TRUE
break break
@@ -147,7 +146,7 @@
if("approve") if("approve")
var/id = text2num(params["id"]) var/id = text2num(params["id"])
for(var/datum/supply_order/SO in SSshuttle.requestlist) for(var/datum/supply_order/SO in SSshuttle.requestlist)
if(SO.ordernum == id) if(SO.id == id)
SSshuttle.requestlist -= SO SSshuttle.requestlist -= SO
SSshuttle.shoppinglist += SO SSshuttle.shoppinglist += SO
. = TRUE . = TRUE
@@ -155,7 +154,7 @@
if("deny") if("deny")
var/id = text2num(params["id"]) var/id = text2num(params["id"])
for(var/datum/supply_order/SO in SSshuttle.requestlist) for(var/datum/supply_order/SO in SSshuttle.requestlist)
if(SO.ordernum == id) if(SO.id == id)
SSshuttle.requestlist -= SO SSshuttle.requestlist -= SO
. = TRUE . = TRUE
break break

View File

@@ -1,115 +1,89 @@
/obj/item/weapon/paper/manifest /obj/item/weapon/paper/manifest
name = "supply manifest" var/order_cost = 0
var/erroneous = 0 var/order_id = 0
var/points = 0 var/errors = 0
var/ordernumber = 0
/obj/item/weapon/paper/manifest/New(atom/A, id, cost)
..()
order_id = id
order_cost = cost
if(prob(MANIFEST_ERROR_CHANCE))
errors |= MANIFEST_ERROR_NAME
if(prob(MANIFEST_ERROR_CHANCE))
errors |= MANIFEST_ERROR_CONTENTS
if(prob(MANIFEST_ERROR_CHANCE))
errors |= MANIFEST_ERROR_ITEM
/datum/supply_order /datum/supply_order
var/ordernum var/id
var/datum/supply_packs/object = null var/orderer
var/orderedby = null var/orderer_rank
var/orderedbyRank var/reason
var/comment = null var/datum/supply_pack/pack
/datum/supply_order/proc/generateRequisition(atom/_loc) /datum/supply_order/New(pack, orderer, orderer_rank, reason)
if(!object) id = SSshuttle.ordernum++
return src.pack = SSshuttle.supply_packs[pack]
src.orderer = orderer
src.orderer_rank = orderer_rank
src.reason = reason
var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(_loc) /datum/supply_order/proc/generateRequisition(turf/T)
reqform.name = "requisition form - [object.name]" var/obj/item/weapon/paper/P = new(T)
reqform.info += "<h3>[station_name] Supply Requisition Form</h3><hr>"
reqform.info += "INDEX: #[ordernum]<br>"
reqform.info += "REQUESTED BY: [orderedby]<br>"
reqform.info += "RANK: [orderedbyRank]<br>"
reqform.info += "REASON: [comment]<br>"
reqform.info += "SUPPLY CRATE TYPE: [object.name]<br>"
reqform.info += "ACCESS RESTRICTION: [get_access_desc(object.access)]<br>"
reqform.info += "CONTENTS:<br>"
reqform.info += object.manifest
reqform.info += "<hr>"
reqform.info += "STAMP BELOW TO APPROVE THIS REQUISITION:<br>"
reqform.update_icon() //Fix for appearing blank when printed. P.name = "requisition form - #[id] ([pack.name])"
P.info += "<h2>[station_name()] Supply Requisition</h2>"
P.info += "<hr/>"
P.info += "Order #[id]<br/>"
P.info += "Item: [pack.name]<br/>"
P.info += "Access Restrictions: [get_access_desc(pack.access)]<br/>"
P.info += "Requested by: [orderer]<br/>"
P.info += "Rank: [orderer_rank]<br/>"
P.info += "Comment: [reason]<br/>"
return reqform P.update_icon()
return P
/datum/subsystem/shuttle/proc/generateSupplyOrder(packId, _orderedby, _orderedbyRank, _comment) /datum/supply_order/proc/generateManifest(obj/structure/closet/crate/C)
if(!packId) var/obj/item/weapon/paper/manifest/P = new(C, id, pack.cost)
return
var/datum/supply_packs/P = supply_packs[packId]
if(!P)
return
var/datum/supply_order/O = new() var/station_name = (P.errors & MANIFEST_ERROR_NAME) ? new_station_name() : station_name()
O.ordernum = ordernum++
O.object = P
O.orderedby = _orderedby
O.orderedbyRank = _orderedbyRank
O.comment = _comment
return O P.name = "shipping manifest - #[id] ([pack.name])"
P.info += "<h2>[command_name()] Shipping Manifest</h2>"
P.info += "<hr/>"
P.info += "Order #[id]<br/>"
P.info += "Destination: [station_name]<br/>"
P.info += "Item: [pack.name]<br/>"
P.info += "Contents: <br/>"
P.info += "<ul>"
for(var/atom/movable/AM in C.contents - P)
if((P.errors & MANIFEST_ERROR_CONTENTS))
if(prob(50))
P.info += "<li>[AM.name]</li>"
else
continue
P.info += "<li>[AM.name]</li>"
P.info += "</ul>"
P.info += "<h4>Stamp below to confirm receipt of goods:</h4>"
/datum/supply_order/proc/createObject(atom/_loc, errors=0) P.update_icon()
if(!object) P.loc = C
return C.manifest = P
C.update_icon()
//create the crate return P
var/atom/Crate = new object.containertype(_loc)
Crate.name = "[object.containername] [comment ? "([comment])":"" ]"
if(object.access)
Crate:req_access = list(text2num(object.access))
//create the manifest slip /datum/supply_order/proc/generate(turf/T)
var/obj/item/weapon/paper/manifest/slip = new /obj/item/weapon/paper/manifest() var/obj/structure/closet/crate/C = pack.generate(T)
slip.erroneous = errors var/obj/item/weapon/paper/manifest/M = generateManifest(C)
slip.points = object.cost
slip.ordernumber = ordernum
var/stationName = (errors & MANIFEST_ERROR_NAME) ? new_station_name() : station_name() if(M.errors & MANIFEST_ERROR_ITEM)
var/packagesAmt = SSshuttle.shoppinglist.len + ((errors & MANIFEST_ERROR_COUNT) ? rand(1,2) : 0) if(istype(C, /obj/structure/closet/crate/secure) || istype(C, /obj/structure/closet/crate/large))
M.errors &= ~MANIFEST_ERROR_ITEM
slip.info = "<h3>[command_name()] Shipping Manifest</h3><hr><br>"
slip.info +="Order #[ordernum]<br>"
slip.info +="Destination: [stationName]<br>"
slip.info +="[packagesAmt] PACKAGES IN THIS SHIPMENT<br>"
slip.info +="CONTENTS:<br><ul>"
//we now create the actual contents
var/list/contains
if(istype(object, /datum/supply_packs/misc/randomised))
var/datum/supply_packs/misc/randomised/SO = object
contains = list()
if(object.contains.len)
for(var/j=1, j<=SO.num_contained, j++)
contains += pick(object.contains)
else
contains = object.contains
for(var/typepath in contains)
if(!typepath)
continue
var/atom/A = new typepath(Crate)
if(object.amount && A.vars.Find("amount") && A:amount)
A:amount = object.amount
slip.info += "<li>[A.name]</li>" //add the item to the manifest (even if it was misplaced)
if((errors & MANIFEST_ERROR_ITEM))
//secure and large crates cannot lose items
if(findtext("[object.containertype]", "/secure/") || findtext("[object.containertype]","/large/"))
errors &= ~MANIFEST_ERROR_ITEM
else else
var/lostAmt = max(round(Crate.contents.len/10), 1) var/lost = max(round(C.contents.len / 10), 1)
//lose some of the items while(--lost >= 0)
while(--lostAmt >= 0) qdel(pick(C.contents))
qdel(pick(Crate.contents)) return C
//manifest finalisation
slip.info += "</ul><br>"
slip.info += "CHECK CONTENTS AND STAMP BELOW THE LINE TO CONFIRM RECEIPT OF GOODS<hr>" // And now this is actually meaningful.
slip.loc = Crate
if(istype(Crate, /obj/structure/closet/crate))
var/obj/structure/closet/crate/CR = Crate
CR.manifest = slip
CR.update_icon()
return Crate

1308
code/modules/cargo/packs.dm Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -12,12 +12,12 @@
earliest_start = 4000 earliest_start = 4000
/datum/round_event/shuttle_loan /datum/round_event/shuttle_loan
announceWhen = 1
endWhen = 500 endWhen = 500
var/dispatch_type = 4 var/dispatched = 0
var/dispatch_type = 0
var/bonus_points = 100 var/bonus_points = 100
var/thanks_msg = "The cargo shuttle should return in five minutes. Have some supply points for your trouble." var/thanks_msg = "The cargo shuttle should return in five minutes. Have some supply points for your trouble."
var/dispatched = 0
announceWhen = 1
/datum/round_event/shuttle_loan/start() /datum/round_event/shuttle_loan/start()
dispatch_type = pick(HIJACK_SYNDIE, RUSKY_PARTY, SPIDER_GIFT, DEPARTMENT_RESUPPLY, ANTIDOTE_NEEDED) dispatch_type = pick(HIJACK_SYNDIE, RUSKY_PARTY, SPIDER_GIFT, DEPARTMENT_RESUPPLY, ANTIDOTE_NEEDED)
@@ -73,8 +73,6 @@
else else
endWhen = activeFor + 1 endWhen = activeFor + 1
//whomever coded this didn't even bother to follow the supply ordering code as an example.
//So I had to waste time rewriting it. Thanks for that >:[
/datum/round_event/shuttle_loan/end() /datum/round_event/shuttle_loan/end()
if(SSshuttle.shuttle_loan && SSshuttle.shuttle_loan.dispatched) if(SSshuttle.shuttle_loan && SSshuttle.shuttle_loan.dispatched)
//make sure the shuttle was dispatched in time //make sure the shuttle was dispatched in time
@@ -91,7 +89,9 @@
var/list/shuttle_spawns = list() var/list/shuttle_spawns = list()
switch(dispatch_type) switch(dispatch_type)
if(HIJACK_SYNDIE) if(HIJACK_SYNDIE)
add_crates(list(/datum/supply_packs/emergency/specialops), empty_shuttle_turfs) var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/emergency/specialops]
pack.generate(pick_n_take(empty_shuttle_turfs))
shuttle_spawns.Add(/mob/living/simple_animal/hostile/syndicate) shuttle_spawns.Add(/mob/living/simple_animal/hostile/syndicate)
shuttle_spawns.Add(/mob/living/simple_animal/hostile/syndicate) shuttle_spawns.Add(/mob/living/simple_animal/hostile/syndicate)
if(prob(75)) if(prob(75))
@@ -100,7 +100,9 @@
shuttle_spawns.Add(/mob/living/simple_animal/hostile/syndicate) shuttle_spawns.Add(/mob/living/simple_animal/hostile/syndicate)
if(RUSKY_PARTY) if(RUSKY_PARTY)
add_crates(list(/datum/supply_packs/organic/party), empty_shuttle_turfs) var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/organic/party]
pack.generate(pick_n_take(empty_shuttle_turfs))
shuttle_spawns.Add(/mob/living/simple_animal/hostile/russian) shuttle_spawns.Add(/mob/living/simple_animal/hostile/russian)
shuttle_spawns.Add(/mob/living/simple_animal/hostile/russian/ranged) //drops a mateba shuttle_spawns.Add(/mob/living/simple_animal/hostile/russian/ranged) //drops a mateba
shuttle_spawns.Add(/mob/living/simple_animal/hostile/bear) shuttle_spawns.Add(/mob/living/simple_animal/hostile/bear)
@@ -110,7 +112,9 @@
shuttle_spawns.Add(/mob/living/simple_animal/hostile/bear) shuttle_spawns.Add(/mob/living/simple_animal/hostile/bear)
if(SPIDER_GIFT) if(SPIDER_GIFT)
add_crates(list(/datum/supply_packs/emergency/specialops), empty_shuttle_turfs) var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/emergency/specialops]
pack.generate(pick_n_take(empty_shuttle_turfs))
shuttle_spawns.Add(/mob/living/simple_animal/hostile/poison/giant_spider) shuttle_spawns.Add(/mob/living/simple_animal/hostile/poison/giant_spider)
shuttle_spawns.Add(/mob/living/simple_animal/hostile/poison/giant_spider) shuttle_spawns.Add(/mob/living/simple_animal/hostile/poison/giant_spider)
shuttle_spawns.Add(/mob/living/simple_animal/hostile/poison/giant_spider/nurse) shuttle_spawns.Add(/mob/living/simple_animal/hostile/poison/giant_spider/nurse)
@@ -135,7 +139,6 @@
T = pick(empty_shuttle_turfs) T = pick(empty_shuttle_turfs)
new /obj/effect/spider/stickyweb(T) new /obj/effect/spider/stickyweb(T)
if(ANTIDOTE_NEEDED) if(ANTIDOTE_NEEDED)
var/virus_type = pick(/datum/disease/beesease, /datum/disease/brainrot, /datum/disease/fluspanish) var/virus_type = pick(/datum/disease/beesease, /datum/disease/brainrot, /datum/disease/fluspanish)
var/turf/T var/turf/T
@@ -158,22 +161,23 @@
if(DEPARTMENT_RESUPPLY) if(DEPARTMENT_RESUPPLY)
var/list/crate_types = list( var/list/crate_types = list(
/datum/supply_packs/emergency/evac, /datum/supply_pack/emergency/equipment,
/datum/supply_packs/security/supplies, /datum/supply_pack/security/supplies,
/datum/supply_packs/organic/food, /datum/supply_pack/organic/food,
/datum/supply_packs/emergency/weedcontrol, /datum/supply_pack/emergency/weedcontrol,
/datum/supply_packs/engineering/tools, /datum/supply_pack/engineering/tools,
/datum/supply_packs/engineering/engiequipment, /datum/supply_pack/engineering/engiequipment,
/datum/supply_packs/science/robotics, /datum/supply_pack/science/robotics,
/datum/supply_packs/science/plasma, /datum/supply_pack/science/plasma,
/datum/supply_packs/medical/supplies /datum/supply_pack/medical/supplies
) )
add_crates(crate_types, empty_shuttle_turfs) for(var/crate in crate_types)
var/datum/supply_pack/pack = SSshuttle.supply_packs[crate]
pack.generate(pick_n_take(empty_shuttle_turfs))
for(var/i=0,i<5,i++) for(var/i in 1 to 5)
var/turf/T = pick(empty_shuttle_turfs) var/decal = pick(/obj/effect/decal/cleanable/flour, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/oil)
var/spawn_type = pick(/obj/effect/decal/cleanable/flour, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/oil) new decal(pick_n_take(empty_shuttle_turfs))
new spawn_type(T)
var/false_positive = 0 var/false_positive = 0
while(shuttle_spawns.len && empty_shuttle_turfs.len) while(shuttle_spawns.len && empty_shuttle_turfs.len)
@@ -185,18 +189,8 @@
var/spawn_type = pick_n_take(shuttle_spawns) var/spawn_type = pick_n_take(shuttle_spawns)
new spawn_type(T) new spawn_type(T)
/datum/round_event/shuttle_loan/proc/add_crates(list/crate_types, list/turfs)
for(var/crate_type in crate_types)
var/turf/T = pick_n_take(turfs)
var/datum/supply_packs/sp_obj = new crate_type()
var/atom/Crate = new sp_obj.containertype(T)
Crate.name = sp_obj.containername
for(var/type_path in sp_obj.contains)
var/atom/A = new type_path(Crate)
if(sp_obj.amount && A.vars.Find("amount") && A:amount)
A:amount = sp_obj.amount
#undef HIJACK_SYNDIE #undef HIJACK_SYNDIE
#undef RUSKY_PARTY #undef RUSKY_PARTY
#undef SPIDER_GIFT #undef SPIDER_GIFT
#undef DEPARTMENT_RESUPPLY #undef DEPARTMENT_RESUPPLY
#undef ANTIDOTE_NEEDED

View File

@@ -1,7 +0,0 @@
/datum/supply_packs/engineering/engine/supermatter_shard
name = "Supermatter Shard Crate"
contains = list(/obj/machinery/power/supermatter_shard)
cost = 100 //So cargo thinks twice before killing themselves with it
containertype = /obj/structure/closet/crate/secure
containername = "supermatter shard crate"
access = access_ce

View File

@@ -59,31 +59,23 @@
if(!SSshuttle.shoppinglist.len) if(!SSshuttle.shoppinglist.len)
return return
var/list/emptyTurfs = list() var/list/empty_turfs = list()
for(var/turf/simulated/floor/T in areaInstance) for(var/turf/simulated/floor/T in areaInstance)
if(T.density || T.contents.len) if(T.density || T.contents.len)
continue continue
emptyTurfs += T empty_turfs += T
for(var/datum/supply_order/SO in SSshuttle.shoppinglist) for(var/datum/supply_order/SO in SSshuttle.shoppinglist)
if(!SO.object) if(!empty_turfs.len)
continue continue
if(SO.object.cost > SSshuttle.points) if(SO.pack.cost > SSshuttle.points)
continue continue
var/errors = 0 SSshuttle.points -= SO.pack.cost
if(prob(5))
errors |= MANIFEST_ERROR_COUNT
if(prob(5))
errors |= MANIFEST_ERROR_NAME
if(prob(5))
errors |= MANIFEST_ERROR_ITEM
var/turf/T = pick_n_take(emptyTurfs)
SO.createObject(T, errors)
SSshuttle.points -= SO.object.cost
SSshuttle.shoppinglist -= SO SSshuttle.shoppinglist -= SO
SSshuttle.orderhistory += SO
SO.generate(pick_n_take(empty_turfs))
/obj/docking_port/mobile/supply/proc/sell() /obj/docking_port/mobile/supply/proc/sell()
var/crates = 0 var/crates = 0
@@ -104,48 +96,48 @@
if(!AM.contents.len) if(!AM.contents.len)
SSshuttle.sold_atoms += " (empty)" SSshuttle.sold_atoms += " (empty)"
else else
var/slip_found = FALSE var/manifest_found = FALSE
for(var/atom/movable/thing in AM) for(var/atom/movable/thing in AM)
SSshuttle.sold_atoms += " [thing.name]" SSshuttle.sold_atoms += " [thing.name]"
if(!slip_found && istype(thing, /obj/item/weapon/paper/manifest)) if(!manifest_found && istype(thing, /obj/item/weapon/paper/manifest))
var/obj/item/weapon/paper/manifest/slip = thing var/obj/item/weapon/paper/manifest/manifest = thing
if(slip.stamped && slip.stamped.len) if(manifest.stamped && manifest.stamped.len)
slip_found = TRUE manifest_found = TRUE
var/denied = FALSE var/denied = FALSE
for(var/stamp in slip.stamped) for(var/stamp in manifest.stamped)
if(stamp == /obj/item/weapon/stamp/denied) if(stamp == /obj/item/weapon/stamp/denied)
denied = TRUE denied = TRUE
break break
if(slip.erroneous && denied) // Caught a mistake by Centcom. if(manifest.errors && denied) // Caught a mistake by Centcom.
pointsEarned = slip.points - SSshuttle.points_per_crate pointsEarned = manifest.order_cost - SSshuttle.points_per_crate
SSshuttle.points += pointsEarned // Give a full refund (minus the crate). SSshuttle.points += pointsEarned // Give a full refund (minus the crate).
msg += "[pointsEarned]: Station correctly denied package [slip.ordernumber]: " msg += "+[pointsEarned]: Station correctly denied package #[manifest.order_id]: "
if(slip.erroneous & MANIFEST_ERROR_NAME) if(manifest.errors & MANIFEST_ERROR_NAME)
msg += "Destination station incorrect. " msg += "Destination station incorrect. "
else if(slip.erroneous & MANIFEST_ERROR_COUNT) else if(manifest.errors & MANIFEST_ERROR_CONTENTS)
msg += "Packages incorrectly counted. " msg += "Contents incorrectly counted. "
else if(slip.erroneous & MANIFEST_ERROR_ITEM) else if(manifest.errors & MANIFEST_ERROR_ITEM)
msg += "Package incomplete. " msg += "Package incomplete. "
msg += "Points refunded." msg += "Points refunded."
else if(!slip.erroneous && !denied) // Approved a slip correctly. else if(!manifest.errors && !denied) // Approved a manifest correctly.
pointsEarned = SSshuttle.points_per_slip pointsEarned = SSshuttle.points_per_manifest
SSshuttle.points += pointsEarned SSshuttle.points += pointsEarned
msg += "+[pointsEarned]: Package [slip.ordernumber] accorded." msg += "+[pointsEarned]: Package [manifest.order_id] accorded."
else if(slip.erroneous) // You done goofed. else if(manifest.errors) // You done goofed.
pointsEarned = -SSshuttle.points_per_slip pointsEarned = -SSshuttle.points_per_manifest
SSshuttle.points += pointsEarned SSshuttle.points += pointsEarned
msg += "[pointsEarned]: Station erroneously approved package [slip.ordernumber]: " msg += "[pointsEarned]: Station erroneously approved package #[manifest.order_id]: "
if(slip.erroneous & MANIFEST_ERROR_NAME) if(manifest.errors & MANIFEST_ERROR_NAME)
msg += "Destination station incorrect." msg += "Destination station incorrect."
else if(slip.erroneous & MANIFEST_ERROR_COUNT) else if(manifest.errors & MANIFEST_ERROR_CONTENTS)
msg += "Packages incorrectly counted." msg += "Contents incorrectly counted. "
else if(slip.erroneous & MANIFEST_ERROR_ITEM) else if(manifest.errors & MANIFEST_ERROR_ITEM)
msg += "We found unshipped items on our dock." msg += "We found unshipped items on our dock."
msg += " Be more vigilant." msg += " Be more vigilant."
else else
pointsEarned = round(SSshuttle.points_per_crate - slip.points) pointsEarned = round(SSshuttle.points_per_crate - manifest.order_cost)
SSshuttle.points += pointsEarned SSshuttle.points += pointsEarned
msg += "[pointsEarned]: Station erroneously denied package [slip.ordernumber]." msg += "[pointsEarned]: Station errorsly denied package #[manifest.order_id]."
// Sell plasma // Sell plasma
if(istype(thing, /obj/item/stack/sheet/mineral/plasma)) if(istype(thing, /obj/item/stack/sheet/mineral/plasma))

View File

@@ -1409,7 +1409,6 @@
#include "code\modules\power\singularity\particle_accelerator\particle_emitter.dm" #include "code\modules\power\singularity\particle_accelerator\particle_emitter.dm"
#include "code\modules\power\singularity\particle_accelerator\particle_power.dm" #include "code\modules\power\singularity\particle_accelerator\particle_power.dm"
#include "code\modules\power\supermatter\supermatter.dm" #include "code\modules\power\supermatter\supermatter.dm"
#include "code\modules\power\supermatter\supermatter_crate.dm"
#include "code\modules\power\tesla\coil.dm" #include "code\modules\power\tesla\coil.dm"
#include "code\modules\power\tesla\energy_ball.dm" #include "code\modules\power\tesla\energy_ball.dm"
#include "code\modules\power\tesla\generator.dm" #include "code\modules\power\tesla\generator.dm"

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -72,8 +72,8 @@
<div class='content'>#{{id}}</div> <div class='content'>#{{id}}</div>
<div class='content'>{{object}}</div> <div class='content'>{{object}}</div>
<div class='content'>{{cost}} Points</div> <div class='content'>{{cost}} Points</div>
<div class='content'>By {{orderedby}}</div> <div class='content'>By {{orderer}}</div>
<div class='content'>Comment: {{comment}}</div> <div class='content'>Comment: {{reason}}</div>
{{#if !data.requestonly}} {{#if !data.requestonly}}
<div class='content'> <div class='content'>
<ui-button icon='check' action='approve' params='{"id": "{{id}}"}'/> <ui-button icon='check' action='approve' params='{"id": "{{id}}"}'/>