/
lib/banish/
lib/d/
lib/doc/
lib/doc/domains/
lib/doc/efun/
lib/doc/examples/
lib/doc/examples/armour/
lib/doc/examples/contain/
lib/doc/examples/food/
lib/doc/examples/magic/
lib/doc/examples/monster/
lib/doc/examples/room/
lib/doc/examples/weapons/
lib/function/
lib/include/
lib/include/fn_specs/
lib/include/skills/
lib/info/
lib/inherit/base/
lib/log/
lib/manuals/312/
lib/news/
lib/obj/party/
lib/objects/components/
lib/open/
lib/open/library/
lib/open/party/
lib/players/
lib/players/zilanthius/
lib/room/
lib/room/city/arena/
lib/room/city/creator/
lib/room/city/garden/monst/
lib/room/city/obj/
lib/room/city/shop/
lib/room/death/
lib/room/registry/
lib/secure/
lib/secure/UDP_CMD_DIR/
lib/skills/
lib/skills/fighter/
lib/skills/thief/
lib/usr/
lib/usr/creators/
lib/usr/players/
/* DISEASE. Angel 1992.
 * This object is used in conjunction with undead.c Clerics and some temples
 * have the power to remove diseases from players. Note that this object is
 * contageous!
 */


string sympthoms;
int timer, hoarse_flag, weight, drop_flag;
 
reset(arg) {
    if (arg) return;
    sympthoms = ({
        "cough","sneeze","groan","sniff","shiver"
        });
    }
 
get() { return 1; }
 
drop() {
    if (drop_flag) return;
    return 1;
    }
 
query_auto_load() {
    return "objects/disease:"+ timer;
    }
 
init_args(arg) {
    if (!arg) return;
    sscanf(arg,"%d",timer);
    }
 
id(str) { return str == "Disease" || str == "disease"; }
query_name() { return "Disease"; }
 
init() {
    if (this_player() != environment()) return;
    set_heart_beat(1);
    if (hoarse_flag) {
        add_action("croak","shout");
        add_action("speak","say");
        add_action("speak","'",1);
        }
    }
 
croak(str) {
    if (!str) return 0;
    say(this_player()->query_name() + " croaks: " + str + "\n");
    write("You croak: "+str+"\n");
    return 1;
    }
 
speak(str) {
string what;
    if (query_verb() != "say") {
        what = extract(query_verb(),1);
        if (str) what += " " + str;
        }
    else what = str;
    if (!what) what = "";
    write("You croak: "+what+"\n");
    say(this_player()->query_name()+" croaks: "+ what +"\n");
    if (!random(10)) spread();
    return 1;
    }
 
query_weight() { return weight; }
 
heart_beat() {
    timer ++;
    if (timer > 500 && !random(40)) {
        command(sympthoms[random(sizeof(sympthoms))],environment());
        if (timer < 1000)  /* contagion */
            spread();
        }
    if (timer > 1000 && timer < 1500) {
	if (environment()->query_intoxication() <= 1)
        	environment()->add_intoxination(1); /* stay drunk */
	}
    if (timer > 1300 && timer < 1750) {
	if (environment()->query_stuffed() <= 1)
        environment() -> add_stuffed(1); /* no appetite */
	}
    if (timer > 2000 && !weight) {
        weight = 3;
        environment()->recalc_all();
        drop_flag = 1;
        transfer(this_object(),environment());
        drop_flag = 0;
        }
    if (timer > 3000 && !hoarse_flag) {
        hoarse_flag = 1;
        move_object(this_object(),environment());
        }
    if (environment()->query_ghost()) return;
    if (environment()->query_ghost()) 
        timer = 0;
    }
 
spread() {
  object ob1;
  int i;

    ob1 = all_inventory(environment(environment()));

    for(i=0; i<sizeof(ob1); i++) {
        if(living(ob1[i]) &&
           ob1[i] -> query_security_level() < 1  &&
          !ob1[i] -> query_spell_immune("disease") &&
          ((int)ob1[i]->query_level() < 2) &&
           !present("Disease", ob1[i]) &&
           random(25) > ob1[i] -> query_constitution()) {
            move_object(clone_object("objects/disease"), ob1[i]);
        }
   }
}