Changes way viruses are stored in mobs.

Now it's an associative list:
uniqueID - virus datum

Updated most instances to match it.
This commit is contained in:
Chinsky
2013-06-19 02:28:53 +04:00
parent cb7daa77a6
commit 960a22ee43
12 changed files with 65 additions and 34 deletions
+18 -2
View File
@@ -33,8 +33,8 @@
/datum/disease2/disease/proc/activate(var/mob/living/carbon/mob)
if(dead)
cure(mob)
mob.virus2 -= src
return
if(mob.stat == 2)
return
if(stage <= 1 && clicks == 0) // with a certain chance, the mob may become immune to the disease before it starts properly
@@ -68,7 +68,7 @@
e.runeffect(mob,stage)
//fever
mob.bodytemperature += max(mob.bodytemperature, min(310+5*stage ,mob.bodytemperature+5*stage))
mob.bodytemperature = max(mob.bodytemperature, min(310+5*stage ,mob.bodytemperature+5*stage))
clicks+=speed
/datum/disease2/disease/proc/cure(var/mob/living/carbon/mob)
@@ -122,3 +122,19 @@
if (antigen != disease.antigen)
equal = 0
return equal
/proc/virus_copylist(var/list/datum/disease2/disease/viruses)
var/list/res = list()
for (var/ID in viruses)
var/datum/disease2/disease/V = viruses[ID]
res["[V.uniqueID]"] = V.getcopy()
return res
/*
/proc/virus_mergelist(var/list/datum/disease2/disease/viruses1, var/list/datum/disease2/disease/viruses2)
var/list/res = virus_copylist(viruses1)
for (var/ID in viruses2)
var/datum/disease2/disease/V = viruses2[ID]
if(!res["[V.uniqueID]"])
res["[V.uniqueID]"] = V.getcopy()
return res
*/
+4 -2
View File
@@ -85,8 +85,10 @@
state("\The [src.name] buzzes, \"No suitable breeding enviroment detected.\"", "blue")
return
var/list/virus = list(dish.virus2.getcopy())
B.data["virus2"] |= virus
if (!B.data["virus2"])
B.data["virus2"] = list()
var/list/virus = list("[dish.virus2.uniqueID]" = dish.virus2.getcopy())
B.data["virus2"] = virus
state("\The [src.name] pings, \"Injection complete.\"", "blue")
+1 -1
View File
@@ -334,7 +334,7 @@
mob.say("*sneeze")
if (prob(50))
var/obj/effect/decal/cleanable/mucus/M = new(get_turf(mob))
M.virus2 = get_copy_viruses(mob.virus2)
M.virus2 = virus_copylist(mob.virus2)
/datum/disease2/effect/gunck
name = "Flemmingtons"
+4 -4
View File
@@ -49,7 +49,7 @@ proc/airborne_can_reach(turf/source, turf/target)
return
if(!istype(M))
return
if (disease in M.virus2)
if ("[disease.uniqueID]" in M.virus2)
return
// if one of the antibodies in the mob's body matches one of the disease's antigens, don't infect
if(M.antibodies & disease.antigen != 0)
@@ -62,20 +62,20 @@ proc/airborne_can_reach(turf/source, turf/target)
var/datum/disease2/disease/D = disease.getcopy()
D.minormutate()
M.virus2 += D
M.virus2["[D.uniqueID]"] = D
//Infects mob M with random lesser disease, if he doesn't have one
/proc/infect_mob_random_lesser(var/mob/living/carbon/M)
var/datum/disease2/disease/D = new /datum/disease2/disease
D.makerandom()
D.infectionchance = 1
M.virus2 += D
M.virus2["[D.uniqueID]"] = D
//Infects mob M with random greated disease, if he doesn't have one
/proc/infect_mob_random_greater(var/mob/living/carbon/M)
var/datum/disease2/disease/D = new /datum/disease2/disease
D.makerandom(1)
M.virus2 += D
M.virus2["[D.uniqueID]"] = D
//Fancy prob() function.
/proc/dprob(var/p)
+1 -1
View File
@@ -39,7 +39,7 @@
if(B)
Blood = B
break
var/list/virus = get_copy_viruses(Blood.data["virus2"])
var/list/virus = virus_copylist(Blood.data["virus2"])
var/choice = text2num(href_list["isolate"]);
for (var/datum/disease2/disease/V in virus)
if (V.uniqueID == choice)