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 <config.h>
# include "/dgd/lib/privilege.h"
# undef status

object command_giver;		/* the current player */
string notify_mesg;		/* current notify_fail mesg */
string verb;			/* the current verb */
mapping players;		/* player mapping */
mapping monsters;		/* monster mapping */
mapping objects;		/* objects mapping */
mapping heart_beats;		/* heart_beats mapping */
mapping call_outs;		/* call_outs mapping */

static void reset(int arg)
{
    int i;

    if (players == 0) {
	players = ([ ]);
	monsters = ([ ]);
	heart_beats = ([ ]);
	call_outs = ([ ]);
    }
}

/*
 * NAME:	set_this_player()
 * DESCRIPTION:	set the current player
 */
void set_this_player(object player)
{
    command_giver = player;
}

/*
 * NAME:	query_this_player()
 * DESCRIPTION:	return the current player, or interactive user
 */
object query_this_player()
{
    return command_giver;
}

/*
 * NAME:	set_verb()
 * DESCRIPTION:	set the current verb
 */
void set_verb(string str)
{
    if (PRIVILEGED()) {
	verb = str;
    }
}

/*
 * NAME:	query_verb()
 * DESCRIPTION:	return the current verb
 */
string query_verb()
{
    return verb;
}

/*
 * NAME:	set_living_name()
 * DESCRIPTION:	set the living name of the current object
 */
void set_living_name(string name)
{
    object obj, *list;

    if (PRIVILEGED()) {
	obj = previous_object();
	if (living(obj)) {
	    if (interactive(obj) != 0) {
		players[name] = obj;
	    } else {
		list = monsters[name];
		if (list == 0) {
		    list = ({ obj });
		} else {
		    list = ({ obj }) + (list - ({ 0 }));
		}
		monsters[name] = list;
	    }
	}
    }
}

/*
 * NAME:	query_find_player()
 * DESCRIPTION:	find a player by name
 */
object query_find_player(string name)
{
    object obj;

    obj = players[name];
    if (obj != 0 && living(obj)) {
	return obj;
    }
    return 0;
}

/*
 * NAME:	query_find_living()
 * DESCRIPTION:	find a living object by name
 */
object query_find_living(string name)
{
    object obj, *list;
    int i, sz;

    obj = query_find_player(name);
    if (obj != 0) {
	return obj;
    }
    list = monsters[name];
    if (list != 0 && sizeof(list) != 0) {
	list -= ({ 0 });
	monsters[name] = list;
	for (i = 0, sz = sizeof(list); i < sz; i++) {
	    if (living(obj=list[i])) {
		return obj;
	    }
	}
    }
    return 0;
}

/*
 * NAME:	add_object()
 * DESCRIPTION:	add an object
 */
void add_object()
{
    if (PRIVILEGED()) {
	if (objects == 0) {
	    objects = ([ ]);
	}
	objects[creator(previous_object())]++;
    }
}

/*
 * NAME:	del_object()
 * DESCRIPTION:	delete an object
 */
void del_object()
{
    if (PRIVILEGED()) {
	objects[creator(previous_object())]--;
    }
}

/*
 * NAME:	add_call_out()
 * DESCRIPTION:	add a call_out
 */
void add_call_out()
{
    if (PRIVILEGED()) {
	call_outs[creator(previous_object())]++;
    }
}

/*
 * NAME:	del_call_out()
 * DESCRIPTION:	remove a call_out
 */
void del_call_out()
{
    if (PRIVILEGED()) {
	call_outs[creator(previous_object())]--;
    }
}

/*
 * NAME:	add_heart_beat()
 * DESCRIPTION:	add a heart_beat
 */
void add_heart_beat()
{
    if (PRIVILEGED()) {
	heart_beats[creator(previous_object())]++;
    }
}

/*
 * NAME:	del_heart_beat()
 * DESCRIPTION:	delete a heart_beat
 */
void del_heart_beat()
{
    if (PRIVILEGED()) {
	heart_beats[creator(previous_object())]--;
    }
}

/*
 * NAME:	show_wiz_list()
 * DESCRIPTION:	show the wizlist
 */
void show_wiz_list()
{
    string *wizards, name;
    int i, sz;

    write("name\t      objects hbeats callouts\n" +
	  "-------------------------------------\n");
    wizards = map_indices(objects);
    for (i = 0, sz = sizeof(wizards); i < sz; i++) {
	if (wizards[i] == 0) {
	    name = "Mudlib";
	} else {
	    name = wizards[i];
	}
	if (strlen(name) < 8) {
	    name += "\t";
	}
	write(name + "\t" + objects[wizards[i]] + "\t" +
	      heart_beats[wizards[i]] + "\t" + call_outs[wizards[i]] + "\n");
    }
}