Committing Giacom's pill updates:

Pills can now be ground up in reagent grinders. You can now put custom amounts of reagent into things using chemmasters. Can now load pill-bottles into chemmasters for mass pill-production.


git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4033 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
elly1989@rocketmail.com
2012-07-11 08:10:19 +00:00
parent f92bec2a22
commit 31f589b67d
2 changed files with 181 additions and 83 deletions

View File

@@ -171,8 +171,10 @@
use_power = 1 use_power = 1
idle_power_usage = 20 idle_power_usage = 20
var/beaker = null var/beaker = null
var/obj/item/weapon/storage/pill_bottle/loaded_pill_bottle = null
var/mode = 0 var/mode = 0
var/condi = 0 var/condi = 0
var/useramount = 30 // Last used amount
New() New()
var/datum/reagents/R = new/datum/reagents(100) var/datum/reagents/R = new/datum/reagents(100)
@@ -204,20 +206,33 @@
spawn(rand(0, 15)) spawn(rand(0, 15))
stat |= NOPOWER stat |= NOPOWER
attackby(var/obj/item/weapon/reagent_containers/glass/B as obj, var/mob/user as mob) attackby(var/obj/item/weapon/B as obj, var/mob/user as mob)
if(!istype(B, /obj/item/weapon/reagent_containers/glass))
return
if(src.beaker) if(istype(B, /obj/item/weapon/reagent_containers/glass))
user << "A beaker is already loaded into the machine."
return if(src.beaker)
user << "A beaker is already loaded into the machine."
return
src.beaker = B
user.drop_item()
B.loc = src
user << "You add the beaker to the machine!"
src.updateUsrDialog()
icon_state = "mixer1"
else if(istype(B, /obj/item/weapon/storage/pill_bottle))
if(src.loaded_pill_bottle)
user << "A pill bottle is already loaded into the machine."
return
src.loaded_pill_bottle = B
user.drop_item()
B.loc = src
user << "You add the pill bottle into the dispenser slot!"
src.updateUsrDialog()
return
src.beaker = B
user.drop_item()
B.loc = src
user << "You add the beaker to the machine!"
src.updateUsrDialog()
icon_state = "mixer1"
Topic(href, href_list) Topic(href, href_list)
if(stat & (BROKEN|NOPOWER)) return if(stat & (BROKEN|NOPOWER)) return
@@ -226,79 +241,113 @@
src.add_fingerprint(usr) src.add_fingerprint(usr)
usr.machine = src usr.machine = src
if(!beaker) return
var/datum/reagents/R = beaker:reagents
if (href_list["analyze"])
var/dat = "" if (href_list["ejectp"])
if(!condi) if(loaded_pill_bottle)
dat += "<TITLE>Chemmaster 3000</TITLE>Chemical infos:<BR><BR>Name:<BR>[href_list["name"]]<BR><BR>Description:<BR>[href_list["desc"]]<BR><BR><BR><A href='?src=\ref[src];main=1'>(Back)</A>" loaded_pill_bottle.loc = src.loc
else loaded_pill_bottle = null
dat += "<TITLE>Condimaster 3000</TITLE>Condiment infos:<BR><BR>Name:<BR>[href_list["name"]]<BR><BR>Description:<BR>[href_list["desc"]]<BR><BR><BR><A href='?src=\ref[src];main=1'>(Back)</A>" else if(href_list["close"])
usr << browse(dat, "window=chem_master;size=575x400") usr << browse(null, "window=chemmaster")
usr.machine = null
return return
else if (href_list["add1"])
R.remove_reagent(href_list["add1"], 1) //Remove/add used instead of trans_to since we're moving a specific reagent. if(beaker)
reagents.add_reagent(href_list["add1"], 1) var/datum/reagents/R = beaker:reagents
else if (href_list["add5"]) if (href_list["analyze"])
R.remove_reagent(href_list["add5"], 5) var/dat = ""
reagents.add_reagent(href_list["add5"], 5) if(!condi)
else if (href_list["add10"]) dat += "<TITLE>Chemmaster 3000</TITLE>Chemical infos:<BR><BR>Name:<BR>[href_list["name"]]<BR><BR>Description:<BR>[href_list["desc"]]<BR><BR><BR><A href='?src=\ref[src];main=1'>(Back)</A>"
R.remove_reagent(href_list["add10"], 10) else
reagents.add_reagent(href_list["add10"], 10) dat += "<TITLE>Condimaster 3000</TITLE>Condiment infos:<BR><BR>Name:<BR>[href_list["name"]]<BR><BR>Description:<BR>[href_list["desc"]]<BR><BR><BR><A href='?src=\ref[src];main=1'>(Back)</A>"
else if (href_list["addall"]) usr << browse(dat, "window=chem_master;size=575x400")
var/temp_amt = R.get_reagent_amount(href_list["addall"]) return
reagents.add_reagent(href_list["addall"], temp_amt) else if (href_list["add1"])
R.del_reagent(href_list["addall"]) R.remove_reagent(href_list["add1"], 1) //Remove/add used instead of trans_to since we're moving a specific reagent.
else if (href_list["remove1"]) reagents.add_reagent(href_list["add1"], 1)
reagents.remove_reagent(href_list["remove1"], 1) else if (href_list["add5"])
if(mode) R.add_reagent(href_list["remove1"], 1) R.remove_reagent(href_list["add5"], 5)
else if (href_list["remove5"]) reagents.add_reagent(href_list["add5"], 5)
reagents.remove_reagent(href_list["remove5"], 5) else if (href_list["add10"])
if(mode) R.add_reagent(href_list["remove5"], 5) R.remove_reagent(href_list["add10"], 10)
else if (href_list["remove10"]) reagents.add_reagent(href_list["add10"], 10)
reagents.remove_reagent(href_list["remove10"], 10) else if (href_list["addall"])
if(mode) R.add_reagent(href_list["remove10"], 10) var/temp_amt = R.get_reagent_amount(href_list["addall"])
else if (href_list["removeall"]) reagents.add_reagent(href_list["addall"], temp_amt)
if(mode) R.del_reagent(href_list["addall"])
var/temp_amt = reagents.get_reagent_amount(href_list["removeall"]) else if (href_list["addcustom"])
R.add_reagent(href_list["removeall"], temp_amt)
reagents.del_reagent(href_list["removeall"]) var/id = href_list["addcustom"]
else if (href_list["toggle"]) useramount = input("Select the amount to transfer.", 30, useramount) as num
if(mode) useramount = isgoodnumber(useramount)
mode = 0 var/realamount = R.get_reagent_amount(id)
else R.remove_reagent(id, min(useramount, realamount))
mode = 1 reagents.add_reagent(id, min(useramount, realamount))
else if (href_list["main"])
attack_hand(usr) else if (href_list["remove1"])
return reagents.remove_reagent(href_list["remove1"], 1)
else if (href_list["eject"]) if(mode) R.add_reagent(href_list["remove1"], 1)
beaker:loc = src.loc else if (href_list["remove5"])
beaker = null reagents.remove_reagent(href_list["remove5"], 5)
reagents.clear_reagents() if(mode) R.add_reagent(href_list["remove5"], 5)
icon_state = "mixer0" else if (href_list["remove10"])
else if (href_list["createpill"]) reagents.remove_reagent(href_list["remove10"], 10)
var/name = reject_bad_text(input(usr,"Name:","Name your pill!",reagents.get_master_reagent_name())) if(mode) R.add_reagent(href_list["remove10"], 10)
var/obj/item/weapon/reagent_containers/pill/P = new/obj/item/weapon/reagent_containers/pill(src.loc) else if (href_list["removeall"])
if(!name) name = reagents.get_master_reagent_name() if(mode)
P.name = "[name] pill" var/temp_amt = reagents.get_reagent_amount(href_list["removeall"])
P.pixel_x = rand(-7, 7) //random position R.add_reagent(href_list["removeall"], temp_amt)
P.pixel_y = rand(-7, 7) reagents.del_reagent(href_list["removeall"])
reagents.trans_to(P,50) else if (href_list["removecustom"])
else if (href_list["createbottle"])
if(!condi) var/id = href_list["removecustom"]
var/name = reject_bad_text(input(usr,"Name:","Name your bottle!",reagents.get_master_reagent_name())) useramount = input("Select the amount to transfer.", 30, useramount) as num
var/obj/item/weapon/reagent_containers/glass/bottle/P = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc) useramount = isgoodnumber(useramount)
reagents.remove_reagent(id, useramount)
if(mode) R.add_reagent(id, useramount)
else if (href_list["toggle"])
if(mode)
mode = 0
else
mode = 1
else if (href_list["main"])
attack_hand(usr)
return
else if (href_list["eject"])
if(beaker)
beaker:loc = src.loc
beaker = null
reagents.clear_reagents()
icon_state = "mixer0"
else if (href_list["createpill"])
var/name = reject_bad_text(input(usr,"Name:","Name your pill!",reagents.get_master_reagent_name()))
var/obj/item/weapon/reagent_containers/pill/P
if(loaded_pill_bottle && loaded_pill_bottle.contents.len < loaded_pill_bottle.storage_slots)
P = new/obj/item/weapon/reagent_containers/pill(loaded_pill_bottle)
else
P = new/obj/item/weapon/reagent_containers/pill(src.loc)
if(!name) name = reagents.get_master_reagent_name() if(!name) name = reagents.get_master_reagent_name()
P.name = "[name] bottle" P.name = "[name] pill"
P.pixel_x = rand(-7, 7) //random position P.pixel_x = rand(-7, 7) //random position
P.pixel_y = rand(-7, 7) P.pixel_y = rand(-7, 7)
reagents.trans_to(P,30)
else
var/obj/item/weapon/reagent_containers/food/condiment/P = new/obj/item/weapon/reagent_containers/food/condiment(src.loc)
reagents.trans_to(P,50) reagents.trans_to(P,50)
else
usr << browse(null, "window=chem_master") else if (href_list["createbottle"])
if(!condi)
var/name = reject_bad_text(input(usr,"Name:","Name your bottle!",reagents.get_master_reagent_name()))
var/obj/item/weapon/reagent_containers/glass/bottle/P = new/obj/item/weapon/reagent_containers/glass/bottle(src.loc)
if(!name) name = reagents.get_master_reagent_name()
P.name = "[name] bottle"
P.pixel_x = rand(-7, 7) //random position
P.pixel_y = rand(-7, 7)
reagents.trans_to(P,30)
else
var/obj/item/weapon/reagent_containers/food/condiment/P = new/obj/item/weapon/reagent_containers/food/condiment(src.loc)
reagents.trans_to(P,50)
src.updateUsrDialog() src.updateUsrDialog()
return return
@@ -315,10 +364,18 @@
var/dat = "" var/dat = ""
if(!beaker) if(!beaker)
dat = "Please insert beaker.<BR>" dat = "Please insert beaker.<BR>"
if(src.loaded_pill_bottle)
dat += "<A href='?src=\ref[src];ejectp=1'>Eject Pill Bottle \[[loaded_pill_bottle.contents.len]/[loaded_pill_bottle.storage_slots]\]</A><BR><BR>"
else
dat += "No pill bottle inserted.<BR><BR>"
dat += "<A href='?src=\ref[src];close=1'>Close</A>" dat += "<A href='?src=\ref[src];close=1'>Close</A>"
else else
var/datum/reagents/R = beaker:reagents var/datum/reagents/R = beaker:reagents
dat += "<A href='?src=\ref[src];eject=1'>Eject beaker and Clear Buffer</A><BR><BR>" dat += "<A href='?src=\ref[src];eject=1'>Eject beaker and Clear Buffer</A><BR>"
if(src.loaded_pill_bottle)
dat += "<A href='?src=\ref[src];ejectp=1'>Eject Pill Bottle \[[loaded_pill_bottle.contents.len]/[loaded_pill_bottle.storage_slots]\]</A><BR><BR>"
else
dat += "No pill bottle inserted.<BR><BR>"
if(!R.total_volume) if(!R.total_volume)
dat += "Beaker is empty." dat += "Beaker is empty."
else else
@@ -329,7 +386,8 @@
dat += "<A href='?src=\ref[src];add1=[G.id]'>(1)</A> " dat += "<A href='?src=\ref[src];add1=[G.id]'>(1)</A> "
if(G.volume >= 5) dat += "<A href='?src=\ref[src];add5=[G.id]'>(5)</A> " if(G.volume >= 5) dat += "<A href='?src=\ref[src];add5=[G.id]'>(5)</A> "
if(G.volume >= 10) dat += "<A href='?src=\ref[src];add10=[G.id]'>(10)</A> " if(G.volume >= 10) dat += "<A href='?src=\ref[src];add10=[G.id]'>(10)</A> "
dat += "<A href='?src=\ref[src];addall=[G.id]'>(All)</A><BR>" dat += "<A href='?src=\ref[src];addall=[G.id]'>(All)</A> "
dat += "<A href='?src=\ref[src];addcustom=[G.id]'>(Custom)</A><BR>"
if(!mode) if(!mode)
dat += "<HR>Transfer to <A href='?src=\ref[src];toggle=1'>disposal:</A><BR>" dat += "<HR>Transfer to <A href='?src=\ref[src];toggle=1'>disposal:</A><BR>"
else else
@@ -341,7 +399,8 @@
dat += "<A href='?src=\ref[src];remove1=[N.id]'>(1)</A> " dat += "<A href='?src=\ref[src];remove1=[N.id]'>(1)</A> "
if(N.volume >= 5) dat += "<A href='?src=\ref[src];remove5=[N.id]'>(5)</A> " if(N.volume >= 5) dat += "<A href='?src=\ref[src];remove5=[N.id]'>(5)</A> "
if(N.volume >= 10) dat += "<A href='?src=\ref[src];remove10=[N.id]'>(10)</A> " if(N.volume >= 10) dat += "<A href='?src=\ref[src];remove10=[N.id]'>(10)</A> "
dat += "<A href='?src=\ref[src];removeall=[N.id]'>(All)</A><BR>" dat += "<A href='?src=\ref[src];removeall=[N.id]'>(All)</A> "
dat += "<A href='?src=\ref[src];removecustom=[N.id]'>(Custom)</A><BR>"
else else
dat += "Empty<BR>" dat += "Empty<BR>"
if(!condi) if(!condi)
@@ -356,6 +415,19 @@
onclose(user, "chem_master") onclose(user, "chem_master")
return return
proc/isgoodnumber(var/num)
if(isnum(num))
if(num > 200)
num = 200
else if(num < 0)
num = 1
else
num = round(num)
return num
else
return 0
/obj/machinery/chem_master/condimaster /obj/machinery/chem_master/condimaster
name = "CondiMaster 3000" name = "CondiMaster 3000"
@@ -610,6 +682,7 @@
*/ */
/obj/item/weapon/grown/nettle = list("acid" = 0), /obj/item/weapon/grown/nettle = list("acid" = 0),
/obj/item/weapon/grown/deathnettle = list("pacid" = 0), /obj/item/weapon/grown/deathnettle = list("pacid" = 0),
/obj/item/weapon/reagent_containers/pill = list()
) )
/obj/machinery/reagentgrinder/New() /obj/machinery/reagentgrinder/New()
@@ -724,6 +797,7 @@
if (istype(O, i)) if (istype(O, i))
return allowed_items[i] return allowed_items[i]
/obj/machinery/reagentgrinder/proc/get_grownweapon_amount(var/obj/item/weapon/grown/O) /obj/machinery/reagentgrinder/proc/get_grownweapon_amount(var/obj/item/weapon/grown/O)
if (!istype(O)) if (!istype(O))
return 5 return 5
@@ -747,6 +821,7 @@
if (!beaker || beaker.reagents.total_volume >= beaker.reagents.maximum_volume) if (!beaker || beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
return return
playsound(src.loc, 'juicer.ogg', 20, 1) playsound(src.loc, 'juicer.ogg', 20, 1)
//Snacks
for (var/obj/item/weapon/reagent_containers/food/snacks/O in src.contents) for (var/obj/item/weapon/reagent_containers/food/snacks/O in src.contents)
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break break
@@ -763,6 +838,7 @@
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break break
del(O) del(O)
//Sheets
for (var/obj/item/stack/sheet/O in src.contents) for (var/obj/item/stack/sheet/O in src.contents)
var/allowed = get_allowed_by_id(O) var/allowed = get_allowed_by_id(O)
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
@@ -777,6 +853,7 @@
if (i == round(O.amount, 1)) if (i == round(O.amount, 1))
del(O) del(O)
break break
//Plants
for (var/obj/item/weapon/grown/O in src.contents) for (var/obj/item/weapon/grown/O in src.contents)
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break break
@@ -792,4 +869,12 @@
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break break
del(O) del(O)
//Pills - Transfers reagents from pill into beaker
for (var/obj/item/weapon/reagent_containers/pill/O in src.contents)
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
var/amount = O.reagents.total_volume
O.reagents.trans_to(beaker, amount)
if(!O.reagents)
del(O)

View File

@@ -46,6 +46,19 @@ Stuff which is in development and not yet visible to players or just code relate
should be listed in the changelog upon commit tho. Thanks. --> should be listed in the changelog upon commit tho. Thanks. -->
<!-- To take advantage of the pretty new format (well it was new when I wrote this anyway), open the "add-to-changelog.html" file in any browser and add the stuff and then generate the html code and paste it here --> <!-- To take advantage of the pretty new format (well it was new when I wrote this anyway), open the "add-to-changelog.html" file in any browser and add the stuff and then generate the html code and paste it here -->
<div class="commit sansserif">
<h2 class="date">11 July 2012</h2>
<h3 class="author">Giacom updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd"><B>Chemistry update:</B> Pills can now be ground up in reagent grinders. You can now put custom amounts of reagent into things using chemmasters. Can now load pill-bottles into chemmasters for mass pill-production.</li>
</ul>
<h3 class="author">Carn updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Clicks on inventory slots with items in now act like a click on the thing in that slot. So clicking smaller things (like pens) is easier and you can remove clothing that borks/goes invisible. Please continure to report those kinds of bug though please. Thanks x</li>
<li class="bugfix">Can no longer interact with your inventory with a mech.</li>
</ul>
</div>
<div class="commit sansserif"> <div class="commit sansserif">
<h2 class="date">Saturday July 7th, 2012</h2> <h2 class="date">Saturday July 7th, 2012</h2>
<h3 class="author">Icarus updated:</h3> <h3 class="author">Icarus updated:</h3>