mud/
mud/2.4.5/dgd/include/
mud/2.4.5/dgd/std/
mud/2.4.5/dgd/sys/
mud/2.4.5/doc/
mud/2.4.5/doc/examples/
mud/2.4.5/log/
mud/2.4.5/obj/Go/
mud/2.4.5/players/
mud/2.4.5/players/lars/
mud/2.4.5/room/death/
mud/2.4.5/room/maze1/
mud/2.4.5/room/post_dir/
mud/2.4.5/room/sub/
#include "living.h"
/*
 * This is the object wich tries to behave like Leo the archwizard.
 * The purpose is to converse with players and give them portable castles.
 */

string next_out;
object next_dest;
object give_him_castle;
int delay;

short() { return "Leo the Archwizard"; }

long() {
    write(short() + ".\n");
}

id(str) { return str == name; }

reset(arg) {
    if (arg)
	return;
    msgout = "leaves";
    msgin = "enters";
    name = "leo";
    cap_name = "Leo";
    next_out = 0;
    is_npc = 1;
    level = 40;
    alignment = 1000;
    weapon_class = WEAPON_CLASS_OF_HANDS;
    max_hp = 300;
    hit_point = 300;
    experience = 100;           /* Changed due to a bug.  Styles.  */
    enable_commands();
    spell_points = 300;
}

catch_tell(str)
{
    object from;
    string a;
    string b;
    string c;
    from = this_player();
    if (!from)
	return;	/* Not from a real player. */
    if (sscanf(str, "%sello%s", a, b) == 2 ||
	sscanf(str, "%s hi%s", a, b) == 2 ||
	sscanf(str, "%s Hi%s", a, b) == 2){
	next_out = "Welcome, " + call_other(from, "query_name", 0) + ".\n";
	if (call_other(from, "query_level", 0) == 20)
	    next_out = next_out +
		"Now that you are a wizard, you can have a castle of your own.\n";
        delay=2;
	next_dest = from;
	set_heart_beat(1);
	return;
    }
    if (sscanf(str, "%sgive%scastle%s", a, b, c) == 3 ||
	sscanf(str, "%swant%scastle%s", a, b, c) == 3) {
	if (call_other(from, "query_level", 0) == 20) {
	    castle();
	    return;
	}
	next_out = "What ! Give a castle to you ?\n";
	next_dest = from;
	delay=2;
	set_heart_beat(1);
	return;
    }
    if (sscanf(str, "%s gives %s to Leo.", a, b) == 2) {
	object ob;
	ob = present(b, this_object());
	if (!ob || !call_other(ob, "id", "orc slayer"))
	    return;
	next_out = "Leo says: Well done. You have fullfilled this quest.\n";
	next_dest = from;
	set_heart_beat(1);
	call_other(from, "set_quest", "orc_slayer");
	destruct(ob);
	return;
    }
    log_file("LEO", str + "\n");
}

/*
 * Always let the heart_beat do the talking, to simulate delay.
 */

heart_beat()
{
    age += 1;
    if (attacker_ob) {
	spell_name = "a blazing fireball";
	spell_cost = 1;
	spell_dam = 30;
    }
    attack();
    if (random(80) == 1)
	say("Leo smiles.\n");
    if (delay>0) {
        delay -= 1;
        return;
    }
    if (next_out) {
	tell_object(next_dest, next_out);
	next_out = 0;
    }
    if (!attacker_ob && !alt_attacker_ob)
	set_heart_beat(0);
}

castle() {
    write(
"You are now ready to take the step into true wizardhood. But, to do this,\n");
    write(
"you must select one wizard that will take responsibility for you.\n");
    write(
"He must also back up your claim of being a wizard, not by cheating.\n");
    write("If you have no name so far, come back here again.\n");
    write("Now give me the name: ");
    input_to("castle2");
}

castle2(back_up_wiz) {
    string castle_name;
    string player_name;
    object wiz;

    if (back_up_wiz == "") {
	write("Welcome back.\n");
	return;
    }
    back_up_wiz = lower_case(back_up_wiz);
    wiz = find_player(back_up_wiz);
    if (!wiz || environment(wiz) != environment() || wiz->query_level() < 21) {
	write("No such wizard is present here.\n");
	return;
    }
    castle_name = clone_object("room/port_castle");
    player_name = call_other(this_player(), "query_name", 0);
    call_other(castle_name, "set_owner", player_name);
    move_object(castle_name, this_player());
    log_file("SPONSOR", back_up_wiz + " : " +
	call_other(this_player(), "query_name") + " " + ctime(time()) + "\n");
    tell_object(this_player(),
		"\n" +
		"Congratulations, you are now a complete god with your own\n" +
		"castle. But beware, you can only drop it once !\n" +
		"When it is dropped, it can never be moved again.\n" +
		"You will get more wizard command at next log in.\n");
    call_other(this_player(), "set_level", 21);
    call_other(this_player(), "set_title", " the wizard");
}