Holder fixes

This commit is contained in:
Fermi
2019-05-14 16:51:03 +01:00
parent 3229e4bf3a
commit 76aec5a5ed
3 changed files with 86 additions and 34 deletions
+53 -34
View File
@@ -127,6 +127,7 @@
update_total()
handle_reactions()
//pH = REAGENT_NORMAL_PH Maybe unnessicary?
return amount
/datum/reagents/proc/get_master_reagent_name()
@@ -431,6 +432,8 @@
else
FermiExplode()
//explode function!!
TODO: make plastic beakers melt at 447 kalvin, all others at ~850 and meta-material never break.
*/
if(required_temp == 0 || (is_cold_recipe && chem_temp <= required_temp) || (!is_cold_recipe && chem_temp >= required_temp))//Temperature check!!
@@ -658,10 +661,10 @@
stepChemAmmount = targetVol - reactedVol
message_admins("target volume reached. Reaction should stop after this loop. stepChemAmmount: [stepChemAmmount] + reactedVol: [reactedVol] = targetVol [targetVol]")
if (reactedVol > 0)
purity = ((purity * reactedVol) + (deltapH * stepChemAmmount)) /((reactedVol+ stepChemAmmount)) //This should add the purity to the product
else
purity = deltapH
//if (reactedVol > 0)
// purity = ((purity * reactedVol) + (deltapH * stepChemAmmount)) /((reactedVol+ stepChemAmmount)) //This should add the purity to the product
//else
purity = deltapH//set purity equal to pH offset
// End.
/*
@@ -679,7 +682,7 @@
for(var/P in cached_results)//Not sure how this works, what is selected_reaction.results?
//reactedVol = max(reactedVol, 1) //this shouldnt happen ...
SSblackbox.record_feedback("tally", "chemical_reaction", cached_results[P]*stepChemAmmount, P)//log
add_reagent(P, cached_results[P]*stepChemAmmount, null, chem_temp)//add reagent function!! I THINK I can do this:
add_reagent(P, cached_results[P]*stepChemAmmount, null, chem_temp, purity)//add reagent function!! I THINK I can do this:
message_admins("purity: [purity], purity of beaker")
message_admins("Temp before change: [chem_temp], pH after change: [pH]")
@@ -786,7 +789,7 @@
var/S = specific_heat()
chem_temp = CLAMP(chem_temp + (J / (S * total_volume)), 2.7, 1000)
/datum/reagents/proc/add_reagent(reagent, amount, list/data=null, reagtemp = 300, pH = 7, no_react = 0)//EDIT HERE TOO ~FERMICHEM~
/datum/reagents/proc/add_reagent(reagent, amount, list/data=null, reagtemp = 300, other_purity = 1, other_pH, no_react = 0)//EDIT HERE TOO ~FERMICHEM~
if(!isnum(amount) || !amount)
return FALSE
@@ -798,6 +801,9 @@
WARNING("[my_atom] attempted to add a reagent called '[reagent]' which doesn't exist. ([usr])")
return FALSE
if(!pH)
other_pH = D.pH
update_total()
var/cached_total = total_volume
if(cached_total + amount > maximum_volume)
@@ -807,6 +813,7 @@
var/new_total = cached_total + amount
var/cached_temp = chem_temp
var/list/cached_reagents = reagent_list
var/cached_pH = pH
//Equalize temperature - Not using specific_heat() because the new chemical isn't in yet.
var/specific_heat = 0
@@ -820,38 +827,49 @@
chem_temp = thermal_energy / (specific_heat * new_total)
////
pH = round(-log(10, ((cached_total * (10^(-cached_pH))) + (amount * (10^(-other_pH)))) / new_total), REAGENT_PH_ACCURACY)
//add the reagent to the existing if it exists
for(var/A in cached_reagents)
var/datum/reagent/R = A
if (R.id == reagent)
R.volume += amount
update_total()
if(my_atom)
my_atom.on_reagent_change(ADD_REAGENT)
R.on_merge(data, amount)
if(!no_react)
handle_reactions()
return TRUE
if(cached_reagents[reagent]) //if it's already in us, merge
var/datum/reagent/R = cached_reagents[reagent]
//otherwise make a new one
var/datum/reagent/R = new D.type(data)
cached_reagents += R
R.holder = src
R.volume = amount
R.loc = get_turf(my_atom)
if(data)
R.data = data
R.on_new(data)
WIP_TAG //check my maths for purity calculations
//Add amount and equalize purity
var/our_pure_moles = R.volume * R.purity
var/their_pure_moles = amount * other_purity
R.volume += amount
//R.purity = (our_pure_moles + their_pure_moles) / (R.volume)
R.purity = ((R.purity * R.volume) + (other_purity * amount)) /((R.volume + amount)) //This should add the purity to the product
////
update_total()
if(my_atom)
my_atom.on_reagent_change(ADD_REAGENT)
R.on_merge(data, amount)
if(!no_react)
start_reacting()
return TRUE
else
var/datum/reagent/R = new D.type(data)
cached_reagents[R.id] = R
R.holder = src
R.volume = amount
R.purity = other_purity
if(data)
R.data = data
R.on_new(data)
update_total()
if(my_atom)
my_atom.on_reagent_change(ADD_REAGENT)
if(!no_react)
start_reacting()
if(isliving(my_atom))
R.on_mob_add(my_atom)
return TRUE
return FALSE
if(isliving(my_atom))
R.on_mob_add(my_atom) //Must occur befor it could posibly run on_mob_delete
update_total()
if(my_atom)
my_atom.on_reagent_change(ADD_REAGENT)
if(!no_react)
handle_reactions()
return TRUE
/datum/reagents/proc/add_reagent_list(list/list_reagents, list/data=null) // Like add_reagent but you can enter a list. Format it like this: list("toxin" = 10, "beer" = 15)
for(var/r_id in list_reagents)
@@ -879,6 +897,7 @@
//clamp the removal amount to be between current reagent amount
//and zero, to prevent removing more than the holder has stored
amount = CLAMP(amount, 0, R.volume)
pH = ((pH * volume)-(R.pH * amount))/(volume - amount)
R.volume -= amount
update_total()
if(!safety)//So it does not handle reactions when it need not to
@@ -17,6 +17,24 @@
//holder.remove_reagent(src.id, metabolization_rate / M.metabolism_efficiency, FALSE) //fermi reagents stay longer if you have a better metabolism
//return ..()
//This should process fermichems to find out how pure they are and what effect to do.
//TODO: add this to the main on_mob_add proc, and check if Fermichem = TRUE
/datum/reagent/fermi/on_mob_add(mob/living/carbon/M)
if (src.purity == 1)
return
if (CR.InverseChemVal > src.purity)
holder.remove_reagent(src.id, volume, FALSE)
holder.add_reagent(CR.InverseChem)
return
else
var/pureVol = volume * purity
var/impureVol = volume * (1 - pureVol)
holder.remove_reagent(src.id, (volume*impureVol), FALSE)
holder.add_reagent(CR.ImpureChem, impureVol, FALSE)
///datum/reagent/fermi/overdose_start(mob/living/carbon/M)
//current_cycle++
@@ -776,6 +794,20 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING
var/creatorName
var/mob/living/creator
/datum/reagent/fermi/enthrall/on_new()
message_admins("On new for enthral proc'd")
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
//var/datum/reagent/fermi/enthrall/E = locate(/datum/reagent/fermi/enthrall) in holder.reagent_list
if (B.["gender"] == "female")
creatorGender = "Mistress"
else
creatorGender = "Master"
creatorName = B.["real_name"]
creatorID = B.["ckey"]
var/mob/living/creatore = holder
creator = creatore
message_admins("name: [creatorName], ID: [creatorID], gender: [creatorGender], creator:[creator]")
/datum/reagent/fermi/enthrall/on_mob_add(mob/living/carbon/M)
..()
if(!creatorID)
@@ -125,6 +125,7 @@
/datum/chemical_reaction/enthral/on_reaction(datum/reagents/holder)
message_admins("On reaction for enthral proc'd")
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
var/datum/reagent/fermi/enthrall/E = locate(/datum/reagent/fermi/enthrall) in holder.reagent_list
if (B.["gender"] == "female")