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.8 by root, Tue Dec 12 20:53:03 2006 UTC vs.
Revision 1.9 by root, Tue Dec 12 21:39:57 2006 UTC

170 170
171 if (disease->env == NULL) 171 if (disease->env == NULL)
172 { /* we're outside of someone */ 172 { /* we're outside of someone */
173 if (disease->stats.maxhp > 0) 173 if (disease->stats.maxhp > 0)
174 disease->value--; 174 disease->value--;
175
175 if (disease->value == 0) 176 if (disease->value == 0)
176 { 177 {
177 disease->remove ();
178 disease->destroy (0); 178 disease->destroy ();
179 return 1; 179 return 1;
180 } 180 }
181 } 181 }
182 else 182 else
183 { 183 {
184 /* if we're inside a person, have the disease run its course */ 184 /* if we're inside a person, have the disease run its course */
185 /* negative foods denote "perpetual" diseases. */ 185 /* negative foods denote "perpetual" diseases. */
186 if (disease->stats.food > 0) 186 if (disease->stats.food > 0)
187 { 187 {
188 disease->stats.food--; 188 disease->stats.food--;
189
189 if (disease->stats.food == 0) 190 if (disease->stats.food == 0)
190 { 191 {
191 remove_symptoms (disease); /* remove the symptoms of this disease */ 192 remove_symptoms (disease); /* remove the symptoms of this disease */
192 grant_immunity (disease); 193 grant_immunity (disease);
193 disease->remove ();
194 disease->destroy (0); 194 disease->destroy ();
195 return 1; 195 return 1;
196 } 196 }
197 } 197 }
198 } 198 }
199
199 /* check to see if we infect others */ 200 /* check to see if we infect others */
200 check_infection (disease); 201 check_infection (disease);
201 202
202 /* impose or modify the symptoms of the disease */ 203 /* impose or modify the symptoms of the disease */
203 if (disease->env && is_susceptible_to_disease (disease->env, disease)) 204 if (disease->env && is_susceptible_to_disease (disease->env, disease))
220 221
221 while ((symptom = find_symptom (disease)) != NULL) 222 while ((symptom = find_symptom (disease)) != NULL)
222 { 223 {
223 if (!victim) 224 if (!victim)
224 victim = symptom->env; 225 victim = symptom->env;
225 symptom->remove (); 226
226 symptom->destroy (0); 227 symptom->destroy ();
227 } 228 }
229
228 if (victim) 230 if (victim)
229 fix_player (victim); 231 fix_player (victim);
230 return 0; 232 return 0;
231} 233}
232 234
331 else if (tmp->type == DISEASE && !strcmp (tmp->name, disease->name)) 333 else if (tmp->type == DISEASE && !strcmp (tmp->name, disease->name))
332 return 0; /* already diseased */ 334 return 0; /* already diseased */
333 } 335 }
334 336
335 /* If we've gotten this far, go ahead and infect the victim. */ 337 /* If we've gotten this far, go ahead and infect the victim. */
336 new_disease = get_object (); 338 new_disease = object::create ();
337 copy_object (disease, new_disease); 339 disease->copy_to (new_disease);
338 new_disease->stats.food = disease->stats.maxgrace; 340 new_disease->stats.food = disease->stats.maxgrace;
339 new_disease->value = disease->stats.maxhp; 341 new_disease->value = disease->stats.maxhp;
340 new_disease->stats.wc -= disease->last_grace; /* self-limiting factor */ 342 new_disease->stats.wc -= disease->last_grace; /* self-limiting factor */
341 343
342 /* Unfortunately, set_owner does the wrong thing to the skills pointers 344 /* Unfortunately, set_owner does the wrong thing to the skills pointers
568 object *new_ob; 570 object *new_ob;
569 int sp_reduce; 571 int sp_reduce;
570 572
571 if (victim == NULL || victim->map == NULL) 573 if (victim == NULL || victim->map == NULL)
572 { /* outside a monster/player, die immediately */ 574 { /* outside a monster/player, die immediately */
573 symptom->remove ();
574 symptom->destroy (0); 575 symptom->destroy ();
575 return 0; 576 return 0;
576 } 577 }
577 578
578 if (symptom->stats.dam > 0) 579 if (symptom->stats.dam > 0)
579 hit_player (victim, symptom->stats.dam, symptom, symptom->attacktype, 1); 580 hit_player (victim, symptom->stats.dam, symptom, symptom->attacktype, 1);
669 */ 670 */
670 if ((casting_level >= disease->level) || (!(random_roll (0, (disease->level - casting_level - 1), caster, PREFER_LOW)))) 671 if ((casting_level >= disease->level) || (!(random_roll (0, (disease->level - casting_level - 1), caster, PREFER_LOW))))
671 { 672 {
672 673
673 remove_symptoms (disease); 674 remove_symptoms (disease);
674 disease->remove ();
675 cure = 1; 675 cure = 1;
676
676 if (caster) 677 if (caster)
677 change_exp (caster, disease->stats.exp, caster->chosen_skill ? &caster->chosen_skill->skill : (const char *) 0, 0); 678 change_exp (caster, disease->stats.exp, caster->chosen_skill ? &caster->chosen_skill->skill : (const char *) 0, 0);
679
678 disease->destroy (0); 680 disease->destroy ();
679 } 681 }
680 } 682 }
681 } 683 }
682 if (cure) 684 if (cure)
683 { 685 {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines