ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/server/disease.C
(Generate patch)

Comparing deliantra/server/server/disease.C (file contents):
Revision 1.38 by root, Fri Aug 24 01:23:29 2007 UTC vs.
Revision 1.41 by root, Mon Aug 27 05:10:51 2007 UTC

144is_susceptible_to_disease (object *victim, object *disease) 144is_susceptible_to_disease (object *victim, object *disease)
145{ 145{
146 if (!QUERY_FLAG (victim, FLAG_ALIVE)) 146 if (!QUERY_FLAG (victim, FLAG_ALIVE))
147 return 0; 147 return 0;
148 148
149 if (victim->flag [FLAG_WIZ])
150 return 0;
151
149 if (strstr (disease->race, "*") && !QUERY_FLAG (victim, FLAG_UNDEAD)) 152 if (strstr (disease->race, "*") && !QUERY_FLAG (victim, FLAG_UNDEAD))
150 return 1; 153 return 1;
151 154
152 if ((disease->race == shstr_undead) && QUERY_FLAG (victim, FLAG_UNDEAD)) 155 if ((disease->race == shstr_undead) && QUERY_FLAG (victim, FLAG_UNDEAD))
153 return 1; 156 return 1;
243 246
244/* searches around for more victims to infect */ 247/* searches around for more victims to infect */
245int 248int
246check_infection (object *disease) 249check_infection (object *disease)
247{ 250{
248 int x, y, range, mflags; 251 int x, y;
249 maptile *map, *map2; 252 maptile *map, *map2;
250 object *tmp; 253 object *tmp;
251 254
252 range = abs (disease->magic); 255 int range = abs (disease->magic);
253 256
254 if (disease->env) 257 if (disease->env)
255 { 258 {
256 x = disease->env->x; 259 x = disease->env->x;
257 y = disease->env->y; 260 y = disease->env->y;
269 272
270 for (int i = x - range; i <= x + range; i++) 273 for (int i = x - range; i <= x + range; i++)
271 for (int j = y - range; j <= y + range; j++) 274 for (int j = y - range; j <= y + range; j++)
272 { 275 {
273 sint16 i2, j2; 276 sint16 i2, j2;
274 mflags = get_map_flags (map, &map2, i, j, &i2, &j2); 277 int mflags = get_map_flags (map, &map2, i, j, &i2, &j2);
275 278
276 if (!(mflags & P_OUT_OF_MAP) && (mflags & P_IS_ALIVE)) 279 if (!(mflags & P_OUT_OF_MAP) && (mflags & P_IS_ALIVE))
277 for (tmp = GET_MAP_OB (map2, i2, j2); tmp; tmp = tmp->above) 280 for (tmp = GET_MAP_OB (map2, i2, j2); tmp; tmp = tmp->above)
278 infect_object (tmp, disease, 0); 281 infect_object (tmp, disease, 0);
279 } 282 }
593 return 0; 596 return 0;
594} 597}
595 598
596/* do the cure disease stuff, from the spell "cure disease" */ 599/* do the cure disease stuff, from the spell "cure disease" */
597int 600int
598cure_disease (object *sufferer, object *caster) 601cure_disease (object *sufferer, object *caster, object *spell)
599{ 602{
600 object *disease, *next; 603 object *disease, *next;
601 int casting_level;
602 int cure = 0; 604 int cure = 0;
603 605
604 if (caster)
605 casting_level = caster->level;
606 else
607 casting_level = 1000; /* if null caster, CURE all. */ 606 int casting_level = caster ? caster->level : 1000; /* if null caster, CURE all. */
608 607
609 for (disease = sufferer->inv; disease; disease = next) 608 for (disease = sufferer->inv; disease; disease = next)
610 { 609 {
611 next = disease->below; 610 next = disease->below;
612 611
620 if ((casting_level >= disease->level) || (!(random_roll (0, (disease->level - casting_level - 1), caster, PREFER_LOW)))) 619 if ((casting_level >= disease->level) || (!(random_roll (0, (disease->level - casting_level - 1), caster, PREFER_LOW))))
621 { 620 {
622 remove_symptoms (disease); 621 remove_symptoms (disease);
623 cure = 1; 622 cure = 1;
624 623
625 if (caster) 624 if (caster && spell)
626 change_exp (caster, disease->stats.exp, caster->chosen_skill ? caster->chosen_skill->skill : (const char *) 0, 0); 625 change_exp (caster, disease->stats.exp, spell->skill, SK_EXP_SKILL_ONLY);
627 626
628 disease->destroy (); 627 disease->destroy ();
629 } 628 }
630 } 629 }
631 } 630 }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines