… | |
… | |
596 | return 0; |
596 | return 0; |
597 | } |
597 | } |
598 | |
598 | |
599 | /* do the cure disease stuff, from the spell "cure disease" */ |
599 | /* do the cure disease stuff, from the spell "cure disease" */ |
600 | int |
600 | int |
601 | cure_disease (object *sufferer, object *caster) |
601 | cure_disease (object *sufferer, object *caster, object *spell) |
602 | { |
602 | { |
603 | object *disease, *next; |
603 | object *disease, *next; |
604 | int casting_level; |
|
|
605 | int cure = 0; |
604 | int cure = 0; |
606 | |
605 | |
607 | if (caster) |
|
|
608 | casting_level = caster->level; |
|
|
609 | else |
|
|
610 | casting_level = 1000; /* if null caster, CURE all. */ |
606 | int casting_level = caster ? caster->level : 1000; /* if null caster, CURE all. */ |
611 | |
607 | |
612 | for (disease = sufferer->inv; disease; disease = next) |
608 | for (disease = sufferer->inv; disease; disease = next) |
613 | { |
609 | { |
614 | next = disease->below; |
610 | next = disease->below; |
615 | |
611 | |
… | |
… | |
623 | 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)))) |
624 | { |
620 | { |
625 | remove_symptoms (disease); |
621 | remove_symptoms (disease); |
626 | cure = 1; |
622 | cure = 1; |
627 | |
623 | |
628 | if (caster) |
624 | if (caster && spell) |
629 | 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); |
630 | |
626 | |
631 | disease->destroy (); |
627 | disease->destroy (); |
632 | } |
628 | } |
633 | } |
629 | } |
634 | } |
630 | } |