# 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");
}
}