upstream-merge-27933

This commit is contained in:
LetterJay
2017-06-11 02:03:27 -05:00
parent 36a9810945
commit a8b71089ae

View File

@@ -9,8 +9,9 @@
idle_power_usage = 40
interact_offline = 1
resistance_flags = FIRE_PROOF | ACID_PROOF
var/energy = 100
var/max_energy = 100
var/cell_type = /obj/item/weapon/stock_parts/cell/high
var/obj/item/weapon/stock_parts/cell/cell
var/powerefficiency = 0.01
var/amount = 30
var/recharged = 0
var/recharge_delay = 5
@@ -54,6 +55,7 @@
/obj/machinery/chem_dispenser/Initialize()
. = ..()
cell = new cell_type
recharge()
dispensable_reagents = sortList(dispensable_reagents)
@@ -66,11 +68,8 @@
recharged -= 1
/obj/machinery/chem_dispenser/proc/recharge()
if(stat & (BROKEN|NOPOWER)) return
var/addenergy = 1
var/oldenergy = energy
energy = min(energy + addenergy, max_energy)
if(energy != oldenergy)
var/usedpower = cell.give( 1 / powerefficiency) //Should always be a gain of one on the UI.
if(usedpower)
use_power(2500)
/obj/machinery/chem_dispenser/emag_act(mob/user)
@@ -106,8 +105,8 @@
/obj/machinery/chem_dispenser/ui_data()
var/data = list()
data["amount"] = amount
data["energy"] = energy
data["maxEnergy"] = max_energy
data["energy"] = cell.charge ? cell.charge * powerefficiency : "0" //To prevent NaN in the UI.
data["maxEnergy"] = cell.maxcharge * powerefficiency
data["isBeakerLoaded"] = beaker ? 1 : 0
var beakerContents[0]
@@ -149,7 +148,7 @@
if(beaker && dispensable_reagents.Find(reagent))
var/datum/reagents/R = beaker.reagents
var/free = R.maximum_volume - R.total_volume
var/actual = min(amount, energy * 10, free)
var/actual = min(amount, (cell.charge * powerefficiency)*10, free)
R.add_reagent(reagent, actual)
energy = max(energy - actual / 10, 0)
@@ -189,15 +188,36 @@
add_overlay(beaker_overlay)
else if(user.a_intent != INTENT_HARM && !istype(I, /obj/item/weapon/card/emag))
to_chat(user, "<span class='warning'>You can't load \the [I] into the machine!</span>")
return ..()
else
return ..()
/obj/machinery/chem_dispenser/get_cell()
return cell
/obj/machinery/chem_dispenser/emp_act(severity)
var/list/datum/reagents/R = list()
var/total = min(rand(7,15), Floor(cell.charge*powerefficiency))
var/datum/reagents/Q = new(total*10)
if(beaker && beaker.reagents)
R += beaker.reagents
for(var/i in 1 to total)
Q.add_reagent(pick(dispensable_reagents), 10)
R += Q
chem_splash(get_turf(src), 3, R)
if(beaker && beaker.reagents)
beaker.reagents.remove_all()
cell.use(total/powerefficiency)
cell.emp_act()
visible_message("<span class='danger'> The [src] malfunctions, spraying chemicals everywhere!</span>")
..()
/obj/machinery/chem_dispenser/constructable
name = "portable chem dispenser"
icon = 'icons/obj/chemical.dmi'
icon_state = "minidispenser"
energy = 10
max_energy = 10
powerefficiency = 0.001
amount = 5
recharge_delay = 30
dispensable_reagents = list()
@@ -263,16 +283,13 @@
/obj/machinery/chem_dispenser/constructable/RefreshParts()
var/time = 0
var/temp_energy = 0
var/i
+ for(var/obj/item/weapon/stock_parts/cell/P in component_parts)
cell = P
for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts)
temp_energy += M.rating
temp_energy--
max_energy = temp_energy * 5 //max energy = (bin1.rating + bin2.rating - 1) * 5, 5 on lowest 25 on highest
time += M.rating
for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts)
time += C.rating
for(var/obj/item/weapon/stock_parts/cell/P in component_parts)
time += round(P.maxcharge, 10000) / 10000
recharge_delay /= time/2 //delay between recharges, double the usual time on lowest 50% less than usual on highest
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
for(i=1, i<=M.rating, i++)