Merge pull request #3296 from VOREStation/aro-odywhitelist

Ody reagent whitelist
This commit is contained in:
Aronai Sieyes
2018-03-20 21:47:59 -04:00
committed by GitHub

View File

@@ -404,7 +404,45 @@
origin_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4, TECH_MAGNET = 4, TECH_DATA = 3)
required_type = /obj/mecha/medical
New()
//This is a list of datums so as to allow id changes, and force compile errors if removed.
var/static/list/allowed_reagents = list(
//Med Reagents,
/datum/reagent/inaprovaline,
/datum/reagent/bicaridine,
/datum/reagent/kelotane,
/datum/reagent/dermaline,
/datum/reagent/dylovene,
/datum/reagent/dexalin,
/datum/reagent/tricordrazine,
/datum/reagent/paracetamol,
/datum/reagent/tramadol,
/datum/reagent/spaceacillin,
//Dispenser Reagents,
/datum/reagent/water,
/datum/reagent/aluminum,
/datum/reagent/carbon,
/datum/reagent/chlorine,
/datum/reagent/copper,
/datum/reagent/ethanol,
/datum/reagent/fluorine,
/datum/reagent/hydrogen,
/datum/reagent/iron,
/datum/reagent/lithium,
/datum/reagent/mercury,
/datum/reagent/nitrogen,
/datum/reagent/oxygen,
/datum/reagent/phosphorus,
/datum/reagent/potassium,
/datum/reagent/radium,
/datum/reagent/acid,
/datum/reagent/silicon,
/datum/reagent/sodium,
/datum/reagent/sugar,
/datum/reagent/sulfur,
/datum/reagent/tungsten
)
/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/New()
..()
flags |= NOREACT
syringes = new
@@ -413,22 +451,30 @@
create_reagents(max_volume)
synth = new (list(src),0)
detach()
/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/initialize()
. = ..()
//Wow nice, firsties
if(LAZYLEN(allowed_reagents) && !istext(allowed_reagents[1]))
for(var/index = 1 to allowed_reagents.len)
var/datum/reagent/path = allowed_reagents[index]
allowed_reagents[index] = initial(path.id)
/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/detach()
synth.stop()
return ..()
critfail()
/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/critfail()
..()
flags &= ~NOREACT
return
get_equip_info()
/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/get_equip_info()
var/output = ..()
if(output)
return "[output] \[<a href=\"?src=\ref[src];toggle_mode=1\">[mode? "Analyze" : "Launch"]</a>\]<br />\[Syringes: [syringes.len]/[max_syringes] | Reagents: [reagents.total_volume]/[reagents.maximum_volume]\]<br /><a href='?src=\ref[src];show_reagents=1'>Reagents list</a>"
return
action(atom/movable/target)
/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/action(atom/movable/target)
if(!action_checks(target))
return
if(istype(target,/obj/item/weapon/reagent_containers/syringe))
@@ -488,7 +534,7 @@
return 1
Topic(href,href_list)
/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/Topic(href,href_list)
..()
var/datum/topic_input/top_filter = new (href,href_list)
if(top_filter.get("toggle_mode"))
@@ -526,7 +572,7 @@
return
return
proc/get_reagents_page()
/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/proc/get_reagents_page()
var/output = {"<html>
<head>
<title>Reagent Synthesizer</title>
@@ -554,7 +600,7 @@
"}
return output
proc/get_reagents_form()
/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/proc/get_reagents_form()
var/r_list = get_reagents_list()
var/inputs
if(r_list)
@@ -569,14 +615,14 @@
"}
return output
proc/get_reagents_list()
/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/proc/get_reagents_list()
var/output
for(var/i=1 to known_reagents.len)
var/reagent_id = known_reagents[i]
output += {"<input type="checkbox" value="[reagent_id]" name="reagent_[i]" [(reagent_id in processed_reagents)? "checked=\"1\"" : null]> [known_reagents[reagent_id]]<br />"}
return output
proc/get_current_reagents()
/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/proc/get_current_reagents()
var/output
for(var/datum/reagent/R in reagents.reagent_list)
if(R.volume > 0)
@@ -585,7 +631,7 @@
output += "Total: [round(reagents.total_volume,0.001)]/[reagents.maximum_volume] - <a href=\"?src=\ref[src];purge_all=1\">Purge All</a>"
return output || "None"
proc/load_syringe(obj/item/weapon/reagent_containers/syringe/S)
/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/proc/load_syringe(obj/item/weapon/reagent_containers/syringe/S)
if(syringes.len<max_syringes)
if(get_dist(src,S) >= 2)
occupant_message("The syringe is too far away.")
@@ -607,7 +653,7 @@
occupant_message("The [src] syringe chamber is full.")
return 0
proc/analyze_reagents(atom/A)
/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/proc/analyze_reagents(atom/A)
if(get_dist(src,A) >= 4)
occupant_message("The object is too far away.")
return 0
@@ -616,30 +662,34 @@
return 0
occupant_message("Analyzing reagents...")
for(var/datum/reagent/R in A.reagents.reagent_list)
if(R.reagent_state == 2 && add_known_reagent(R.id,R.name))
if(R.id in known_reagents)
occupant_message("Reagent \"[R.name]\" already present in database, skipping.")
else if(R.reagent_state == 2 && add_known_reagent(R.id,R.name))
occupant_message("Reagent analyzed, identified as [R.name] and added to database.")
send_byjax(chassis.occupant,"msyringegun.browser","reagents_form",get_reagents_form())
else
occupant_message("Reagent \"[R.name]\" unable to be scanned, skipping.")
occupant_message("Analyzis complete.")
return 1
proc/add_known_reagent(r_id,r_name)
/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/proc/add_known_reagent(r_id,r_name)
set_ready_state(0)
do_after_cooldown()
if(!(r_id in known_reagents))
if(!(r_id in known_reagents) && (r_id in allowed_reagents))
known_reagents += r_id
known_reagents[r_id] = r_name
return 1
return 0
update_equip_info()
/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/update_equip_info()
if(..())
send_byjax(chassis.occupant,"msyringegun.browser","reagents",get_current_reagents())
send_byjax(chassis.occupant,"msyringegun.browser","reagents_form",get_reagents_form())
return 1
return
on_reagent_change()
/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/on_reagent_change()
..()
update_equip_info()
return