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 scanmode = 0
else if((!isnull(cartridge)) && (cartridge.access_mechanic)) else if((!isnull(cartridge)) && (cartridge.access_mechanic))
if(!dev_analys) 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 scanmode = 6
//MESSENGER/NOTE FUNCTIONS=================================== //MESSENGER/NOTE FUNCTIONS===================================
@@ -1676,8 +1677,9 @@ var/global/list/obj/item/device/pda/PDAs = list()
if (6) if (6)
if(dev_analys) //let's use this instead. Much neater if(dev_analys) //let's use this instead. Much neater
dev_analys.afterattack(A, user) if(A in range(user, 1))
A.attackby(src, user) dev_analys.afterattack(A, user, 1)
A.attackby(src, user)
if (!scanmode && istype(A, /obj/item/weapon/paper) && owner) if (!scanmode && istype(A, /obj/item/weapon/paper) && owner)
note = A:info note = A:info

View File

@@ -198,22 +198,27 @@
output += "[output ? " | " : null][get_resource_cost_w_coeff(part,"$[matID]")] [material.processed_name]" output += "[output ? " | " : null][get_resource_cost_w_coeff(part,"$[matID]")] [material.processed_name]"
return output return output
/obj/machinery/r_n_d/fabricator/proc/build_part(var/datum/design/part) /obj/machinery/r_n_d/fabricator/proc/remove_materials(var/datum/design/part)
if(!part)
return
for(var/M in part.materials) for(var/M in part.materials)
if(!check_mat(part, M)) 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 return 0
if(copytext(M,1,2) == "$") if(copytext(M,1,2) == "$" && !(research_flags & IGNORE_MATS))
var/matID=copytext(M,2) var/matID=copytext(M,2)
var/datum/material/material=materials[matID] var/datum/material/material=materials[matID]
material.stored = max(0, (material.stored-part.materials[M])) material.stored = max(0, (material.stored-part.materials[M]))
materials[matID]=material materials[matID]=material
else else if(!(research_flags & IGNORE_CHEMS))
reagents.remove_reagent(M, part.materials[M]) 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) src.being_built = new part.build_path(src)

View File

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

View File

@@ -43,6 +43,7 @@
//message_admins("Found the [D]") //message_admins("Found the [D]")
req_tech = D.req_tech //our tech is simply the item requirement req_tech = D.req_tech //our tech is simply the item requirement
materials = D.materials materials = D.materials
materials["$plastic"] += round(0.1 * src.MatTotal()) //plastic reqs
del(D) del(D)
else else
req_tech = ConvertReqString2List(I.origin_tech) 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_WIDTH 1000 //Gen fab stands for General Fabricator
#define GEN_FAB_HEIGHT 600 #define GEN_FAB_HEIGHT 600
#define GEN_FAB_BASETIME 100 #define GEN_FAB_BASETIME 5
#define GEN_FAB_BASESTORAGE 150000 #define GEN_FAB_BASESTORAGE 150000
@@ -10,15 +10,17 @@
desc = "A machine used to produce items from blueprint designs." desc = "A machine used to produce items from blueprint designs."
icon = 'icons/obj/machines/mechanic.dmi' icon = 'icons/obj/machines/mechanic.dmi'
icon_state = "genfab" icon_state = "genfab"
max_material_storage = 150000 max_material_storage = GEN_FAB_BASESTORAGE
nano_file = "genfab.tmpl" nano_file = "genfab.tmpl"
var/list/design_types = list("machine" = 0, "item" = 1) var/list/design_types = list("machine" = 0, "item" = 1)
var/list/uses_list = list() var/list/uses_list = list()
build_time = GEN_FAB_BASETIME
idle_power_usage = 20 idle_power_usage = 20
active_power_usage = 5000 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()) 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) /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(copytext(M,1,2) == "$")
if(src.research_flags & IGNORE_MATS)
return num_requested
var/matID=copytext(M,2) var/matID=copytext(M,2)
var/datum/material/material=materials[matID] var/datum/material/material=materials[matID]
for(var/n=num_requested,n>=1,n--) for(var/n=num_requested,n>=1,n--)
if ((material.stored-(being_built.materials[M]*n)) >= 0) if ((material.stored-(being_built.materials[M]*n)) >= 0)
return n return n
else else
if(src.research_flags & IGNORE_CHEMS)
return num_requested
for(var/n=num_requested,n>=1,n--) for(var/n=num_requested,n>=1,n--)
if (reagents.has_reagent(M, being_built.materials[M])) if (reagents.has_reagent(M, being_built.materials[M]))
return n 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 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 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 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 // Mecca scanner flags
#define MECH_SCAN_FAIL 1 // Cannot be scanned at all. #define MECH_SCAN_FAIL 1 // Cannot be scanned at all.