1 | /* |
1 | /* |
2 | * static char *rcsid_disease_c = |
2 | * static char *rcsid_disease_c = |
3 | * "$Id: disease.C,v 1.2 2006/08/29 08:01:37 root Exp $"; |
3 | * "$Id: disease.C,v 1.3 2006/09/03 00:18:42 root Exp $"; |
4 | */ |
4 | */ |
5 | /* |
5 | /* |
6 | CrossFire, A Multiplayer game for X-windows |
6 | CrossFire, A Multiplayer game for X-windows |
7 | |
7 | |
8 | Copyright (C) 2002 Mark Wedel & Crossfire Development Team |
8 | Copyright (C) 2002 Mark Wedel & Crossfire Development Team |
… | |
… | |
317 | |
317 | |
318 | if(get_owner(disease)) { |
318 | if(get_owner(disease)) { |
319 | set_owner(new_disease,disease->owner); |
319 | set_owner(new_disease,disease->owner); |
320 | |
320 | |
321 | /* Only need to update skill if different */ |
321 | /* Only need to update skill if different */ |
322 | if (new_disease->skill != disease->skill) { |
322 | if (new_disease->skill != disease->skill) |
323 | if (new_disease->skill) free_string(new_disease->skill); |
323 | new_disease->skill = disease->skill; |
324 | if (disease->skill) new_disease->skill = add_refcount(disease->skill); |
|
|
325 | } |
|
|
326 | } |
324 | } |
327 | else { /* for diseases which are passed by hitting, set owner and praying skill*/ |
325 | else { /* for diseases which are passed by hitting, set owner and praying skill*/ |
328 | if(disease->env && disease->env->type==PLAYER) { |
326 | if(disease->env && disease->env->type==PLAYER) { |
329 | object *player = disease->env; |
327 | object *player = disease->env; |
330 | |
328 | |
… | |
… | |
344 | char buf[128]; |
342 | char buf[128]; |
345 | /* if the disease has a title, it has a special infection message |
343 | /* if the disease has a title, it has a special infection message |
346 | * This messages is printed in the form MESSAGE victim |
344 | * This messages is printed in the form MESSAGE victim |
347 | */ |
345 | */ |
348 | if(new_disease->title) |
346 | if(new_disease->title) |
349 | sprintf(buf,"%s %s!!",disease->title,victim->name); |
347 | sprintf(buf,"%s %s!!",&disease->title,&victim->name); |
350 | else |
348 | else |
351 | sprintf(buf,"You infect %s with your disease, %s!",victim->name,new_disease->name); |
349 | sprintf(buf,"You infect %s with your disease, %s!",&victim->name,&new_disease->name); |
352 | |
350 | |
353 | if(victim->type == PLAYER) |
351 | if(victim->type == PLAYER) |
354 | new_draw_info(NDI_UNIQUE | NDI_RED, 0, new_disease->owner, buf); |
352 | new_draw_info(NDI_UNIQUE | NDI_RED, 0, new_disease->owner, buf); |
355 | else |
353 | else |
356 | new_draw_info(0, 4, new_disease->owner, buf); |
354 | new_draw_info(0, 4, new_disease->owner, buf); |
… | |
… | |
419 | |
417 | |
420 | |
418 | |
421 | new_symptom->stats.maxsp = disease->stats.maxsp; |
419 | new_symptom->stats.maxsp = disease->stats.maxsp; |
422 | new_symptom->stats.food = new_symptom->stats.maxgrace; |
420 | new_symptom->stats.food = new_symptom->stats.maxgrace; |
423 | |
421 | |
424 | FREE_AND_COPY(new_symptom->name, disease->name); |
422 | new_symptom->name = |
425 | FREE_AND_COPY(new_symptom->name_pl, disease->name); |
423 | new_symptom->name_pl = disease->name; |
|
|
424 | |
426 | new_symptom->level = disease->level; |
425 | new_symptom->level = disease->level; |
427 | new_symptom->speed = disease->speed; |
426 | new_symptom->speed = disease->speed; |
428 | new_symptom->value = 0; |
427 | new_symptom->value = 0; |
429 | new_symptom->stats.Str =disease->stats.Str; |
428 | new_symptom->stats.Str =disease->stats.Str; |
430 | new_symptom->stats.Dex = disease->stats.Dex; |
429 | new_symptom->stats.Dex = disease->stats.Dex; |
… | |
… | |
437 | new_symptom->stats.food =disease->last_eat; |
436 | new_symptom->stats.food =disease->last_eat; |
438 | new_symptom->stats.maxsp = disease->stats.maxsp; |
437 | new_symptom->stats.maxsp = disease->stats.maxsp; |
439 | new_symptom->last_sp = disease->last_sp; |
438 | new_symptom->last_sp = disease->last_sp; |
440 | new_symptom->stats.exp = 0; |
439 | new_symptom->stats.exp = 0; |
441 | new_symptom->stats.hp = disease->stats.hp; |
440 | new_symptom->stats.hp = disease->stats.hp; |
442 | new_symptom->msg = add_string(disease->msg); |
441 | new_symptom->msg = disease->msg; |
443 | new_symptom->attacktype = disease->attacktype; |
442 | new_symptom->attacktype = disease->attacktype; |
444 | new_symptom->other_arch = disease->other_arch; |
443 | new_symptom->other_arch = disease->other_arch; |
445 | |
444 | |
446 | set_owner(new_symptom,disease->owner); |
445 | set_owner(new_symptom,disease->owner); |
|
|
446 | |
447 | if (new_symptom->skill != disease->skill) { |
447 | if (new_symptom->skill != disease->skill) |
448 | if (new_symptom->skill) free_string(new_symptom->skill); |
448 | new_symptom->skill = disease->skill; |
449 | if (disease->skill) new_symptom->skill = add_refcount(disease->skill); |
449 | |
450 | } |
|
|
451 | new_symptom->move_block=0; |
450 | new_symptom->move_block=0; |
452 | insert_ob_in_ob(new_symptom,victim); |
451 | insert_ob_in_ob(new_symptom,victim); |
453 | return 1; |
452 | return 1; |
454 | } |
453 | } |
455 | |
454 | |
… | |
… | |
475 | symptom->stats.food = (int) (scale*disease->last_eat); |
474 | symptom->stats.food = (int) (scale*disease->last_eat); |
476 | symptom->stats.maxsp = (int) (scale*disease->stats.maxsp); |
475 | symptom->stats.maxsp = (int) (scale*disease->stats.maxsp); |
477 | symptom->last_sp = (int) (scale*disease->last_sp); |
476 | symptom->last_sp = (int) (scale*disease->last_sp); |
478 | symptom->stats.exp = 0; |
477 | symptom->stats.exp = 0; |
479 | symptom->stats.hp = (int) (scale*disease->stats.hp); |
478 | symptom->stats.hp = (int) (scale*disease->stats.hp); |
480 | symptom->msg = add_string(disease->msg); |
479 | symptom->msg = disease->msg; |
481 | symptom->attacktype = disease->attacktype; |
480 | symptom->attacktype = disease->attacktype; |
482 | symptom->other_arch = disease->other_arch; |
481 | symptom->other_arch = disease->other_arch; |
483 | } |
482 | } |
484 | SET_FLAG(symptom,FLAG_APPLIED); |
483 | SET_FLAG(symptom,FLAG_APPLIED); |
485 | fix_player(victim); |
484 | fix_player(victim); |
… | |
… | |
499 | walk->level = disease->level; |
498 | walk->level = disease->level; |
500 | return 1; /* just update the existing immunity. */ |
499 | return 1; /* just update the existing immunity. */ |
501 | } |
500 | } |
502 | } |
501 | } |
503 | immunity = get_archetype("immunity"); |
502 | immunity = get_archetype("immunity"); |
504 | immunity->name = add_string(disease->name); |
503 | immunity->name = disease->name; |
505 | immunity->level = disease->level; |
504 | immunity->level = disease->level; |
506 | immunity->move_block = 0; |
505 | immunity->move_block = 0; |
507 | insert_ob_in_ob(immunity,disease->env); |
506 | insert_ob_in_ob(immunity,disease->env); |
508 | return 1; |
507 | return 1; |
509 | |
508 | |
… | |
… | |
598 | |
597 | |
599 | remove_symptoms(disease); |
598 | remove_symptoms(disease); |
600 | remove_ob(disease); |
599 | remove_ob(disease); |
601 | cure=1; |
600 | cure=1; |
602 | if(caster) change_exp(caster,disease->stats.exp, |
601 | if(caster) change_exp(caster,disease->stats.exp, |
603 | caster->chosen_skill?caster->chosen_skill->skill:NULL, 0); |
602 | caster->chosen_skill ? &caster->chosen_skill->skill : (const char *)0, 0); |
604 | free_object(disease); |
603 | free_object(disease); |
605 | } |
604 | } |
606 | } |
605 | } |
607 | } |
606 | } |
608 | if (cure) { |
607 | if (cure) { |