Mechanic fixing.

PDA device analysers now work as expected.
Groundwork for fabricators ignoring design requirements, which general fabricators now do for chems.
Item designs based on existing designs now properly generate a plastic requirement.
Sped up the flatpacker a little to balance its costs.
This commit is contained in:
ComicIronic
2014-12-16 10:02:32 +00:00
parent c9e270538f
commit 58b1575c34
7 changed files with 37 additions and 27 deletions

View File

@@ -1186,7 +1186,8 @@ var/global/list/obj/item/device/pda/PDAs = list()
scanmode = 0
else if((!isnull(cartridge)) && (cartridge.access_mechanic))
if(!dev_analys)
dev_analys = new //let's create that device analyser
dev_analys = new(src) //let's create that device analyser
dev_analys.max_designs = 5
scanmode = 6
//MESSENGER/NOTE FUNCTIONS===================================
@@ -1676,7 +1677,8 @@ var/global/list/obj/item/device/pda/PDAs = list()
if (6)
if(dev_analys) //let's use this instead. Much neater
dev_analys.afterattack(A, user)
if(A in range(user, 1))
dev_analys.afterattack(A, user, 1)
A.attackby(src, user)
if (!scanmode && istype(A, /obj/item/weapon/paper) && owner)

View File

@@ -198,22 +198,27 @@
output += "[output ? " | " : null][get_resource_cost_w_coeff(part,"$[matID]")] [material.processed_name]"
return output
/obj/machinery/r_n_d/fabricator/proc/build_part(var/datum/design/part)
if(!part)
return
/obj/machinery/r_n_d/fabricator/proc/remove_materials(var/datum/design/part)
for(var/M in part.materials)
if(!check_mat(part, M))
src.visible_message("<font color='blue'>The [src.name] beeps, \"Not enough materials to complete item.\"</font>")
stopped=1
return 0
if(copytext(M,1,2) == "$")
if(copytext(M,1,2) == "$" && !(research_flags & IGNORE_MATS))
var/matID=copytext(M,2)
var/datum/material/material=materials[matID]
material.stored = max(0, (material.stored-part.materials[M]))
materials[matID]=material
else
else if(!(research_flags & IGNORE_CHEMS))
reagents.remove_reagent(M, part.materials[M])
return 1
/obj/machinery/r_n_d/fabricator/proc/build_part(var/datum/design/part)
if(!part)
return
if(!remove_materials(part))
stopped = 1
src.visible_message("<font color='blue'>The [src.name] beeps, \"Not enough materials to complete item.\"</font>")
return
src.being_built = new part.build_path(src)

View File

@@ -1,7 +1,7 @@
#define FLA_FAB_WIDTH 1000
#define FLA_FAB_HEIGHT 600
#define FLA_FAB_BASETIME 100
#define FLA_FAB_BASETIME 0.5
/obj/machinery/r_n_d/fabricator/mechanic_fab/flatpacker
name = "Flatpack Fabricator"
@@ -11,6 +11,8 @@
nano_file = "flatpacker.tmpl"
build_time = FLA_FAB_BASETIME
design_types = list("machine" = 1, "item" = 0)
var/build_parts = list(
@@ -47,18 +49,10 @@ obj/machinery/r_n_d/fabricator/mechanic_fab/flatpacker/build_part(var/datum/desi
if(!part)
return
for(var/M in part.materials)
if(!check_mat(part, M))
src.visible_message("<font color='blue'>The [src.name] beeps, \"Not enough materials to complete item.\"</font>")
if(!remove_materials(part))
stopped = 1
return 0
if(copytext(M,1,2) == "$")
var/matID=copytext(M,2)
var/datum/material/material=materials[matID]
material.stored = max(0, (material.stored-part.materials[M]))
materials[matID]=material
else
reagents.remove_reagent(M, part.materials[M])
src.visible_message("<font color='blue'>The [src.name] beeps, \"Not enough materials to complete item.\"</font>")
return
src.being_built = new part.build_path(src)

View File

@@ -43,6 +43,7 @@
//message_admins("Found the [D]")
req_tech = D.req_tech //our tech is simply the item requirement
materials = D.materials
materials["$plastic"] += round(0.1 * src.MatTotal()) //plastic reqs
del(D)
else
req_tech = ConvertReqString2List(I.origin_tech)

View File

@@ -1,7 +1,7 @@
#define GEN_FAB_WIDTH 1000 //Gen fab stands for General Fabricator
#define GEN_FAB_HEIGHT 600
#define GEN_FAB_BASETIME 100
#define GEN_FAB_BASETIME 5
#define GEN_FAB_BASESTORAGE 150000
@@ -10,15 +10,17 @@
desc = "A machine used to produce items from blueprint designs."
icon = 'icons/obj/machines/mechanic.dmi'
icon_state = "genfab"
max_material_storage = 150000
max_material_storage = GEN_FAB_BASESTORAGE
nano_file = "genfab.tmpl"
var/list/design_types = list("machine" = 0, "item" = 1)
var/list/uses_list = list()
build_time = GEN_FAB_BASETIME
idle_power_usage = 20
active_power_usage = 5000
research_flags = NANOTOUCH | TAKESMATIN | HASOUTPUT
research_flags = NANOTOUCH | TAKESMATIN | HASOUTPUT | IGNORE_CHEMS //we don't need chems to make boards
part_sets = list("Items" = list())

View File

@@ -276,12 +276,16 @@
/obj/machinery/r_n_d/proc/check_mat(var/datum/design/being_built, var/M, var/num_requested=1)
if(copytext(M,1,2) == "$")
if(src.research_flags & IGNORE_MATS)
return num_requested
var/matID=copytext(M,2)
var/datum/material/material=materials[matID]
for(var/n=num_requested,n>=1,n--)
if ((material.stored-(being_built.materials[M]*n)) >= 0)
return n
else
if(src.research_flags & IGNORE_CHEMS)
return num_requested
for(var/n=num_requested,n>=1,n--)
if (reagents.has_reagent(M, being_built.materials[M]))
return n

View File

@@ -931,6 +931,8 @@ var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accesse
#define ACCESS_EMAG 32 //does it lose all its access when smacked by an emag? incompatible with CONSOLECONTROl, for obvious reasons
#define LOCKBOXES 64 //does it spawn a lockbox around a design which is said to be locked? - for fabricators
#define TRUELOCKS 128 //does it make a truly locked lockbox? If not set, the lockboxes made are unlockable by any crew with an ID
#define IGNORE_MATS 256 //does it ignore material requirements for designs? - warning, can be OP
#define IGNORE_CHEMS 512 //does it ignore chemical requirements for designs? - also super OP
// Mecca scanner flags
#define MECH_SCAN_FAIL 1 // Cannot be scanned at all.