diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 7ce5d2a454e..32eb7019146 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -84,6 +84,8 @@ //Random events (vomiting etc) handle_random_events() + handle_virus_updates() + //Handle temperature/pressure differences between body and environment handle_environment(environment) @@ -1262,6 +1264,7 @@ if(bodytemperature > 406) for(var/datum/disease/D in viruses) D.cure() + if(virus2) virus2.cure(src) if(!virus2) for(var/obj/effect/decal/cleanable/blood/B in view(1,src)) if(B.virus2 && get_infection_chance()) diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm index 6764da2e28c..51f17273e3b 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -25,7 +25,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 for(var/datum/reagent/blood/B in vessel.reagent_list) if(B.id == "blood") B.data = list( "donor"=src,"viruses"=null,"blood_DNA"=dna.unique_enzymes,"blood_type"=dna.b_type, \ - "resistances"=null,"trace_chem"=null, "virus2" = null, "antobodies" = null) + "resistances"=null,"trace_chem"=null, "virus2" = null, "antibodies" = null) // Takes care blood loss and regeneration /mob/living/carbon/human/proc/handle_blood() @@ -165,7 +165,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 B.data["donor"] = src if(src.virus2) B.data["virus2"] = src.virus2.getcopy() - B.data["antibodies"] |= src.antibodies + B.data["antibodies"] = src.antibodies B.data["blood_DNA"] = copytext(src.dna.unique_enzymes,1,0) if(src.resistances && src.resistances.len) if(B.data["resistances"]) @@ -176,8 +176,8 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 var/list/temp_chem = list() for(var/datum/reagent/R in src.reagents.reagent_list) - temp_chem += R.name - temp_chem[R.name] = R.volume + temp_chem += R.id + temp_chem[R.id] = R.volume B.data["trace_chem"] = list2params(temp_chem) return B @@ -197,9 +197,16 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 reagents.add_reagent("toxin",amount * 0.5) reagents.update_total() else - vessel.add_reagent("blood", amount) + vessel.add_reagent("blood", amount, injected.data) vessel.update_total() + var/list/chems = list() + chems = params2list(injected.data["trace_chem"]) + for(var/C in chems) + src.reagents.add_reagent(C, (text2num(chems[C]) / 560) * amount)//adds trace chemicals to owner's blood + //world << "added [(text2num(chems[C])/560) * amount] = [text2num(chems[C])]/560*[amount] units of [C] to [src]" //DEBUG + reagents.update_total() + container.reagents.remove_reagent("blood", amount) //Gets human's own blood. diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 857b085c2dc..456c2205215 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -103,7 +103,7 @@ datum blood - data = new/list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null) + data = new/list("donor"=null,"viruses"=null,"blood_DNA"=null,"blood_type"=null,"resistances"=null,"trace_chem"=null, "antibodies" = null) name = "Blood" id = "blood" reagent_state = LIQUID @@ -122,11 +122,14 @@ datum M.contract_disease(D) else //injected M.contract_disease(D, 1, 0) - if(self.data && self.data["virus2"]) + if(self.data && self.data["virus2"] && istype(M, /mob/living/carbon))//infecting... if(method == TOUCH) infect_virus2(M,self.data["virus2"]) else infect_virus2(M,self.data["virus2"],1) + if(self.data && self.data["antibodies"] && istype(M, /mob/living/carbon))//... and curing + var/mob/living/carbon/C = M + C.antibodies |= self.data["antibodies"]