#include <unistd.h>
#include <stdlib.h>
#include "kernel.h"
#include <time.h>
#include <string.h>
#include "levels.h"
#ifdef VARGS
#include <stdarg.h>
#endif
#include "timing.h"
#include "log.h"
#include "uaf.h"
#include "bprintf.h"
#include "verbs.h"
#include "wizard.h"
#include "parse.h"
#include "sendsys.h"
#include "mobile.h"
#include "objsys.h"
#include "rooms.h"
#include "flags.h"
#include "pflags.h"
#include "lflags.h"
#include "sflags.h"
#include "cflags.h"
#include "locations.h"
#include "fight.h"
#include "wizlist.h"
#include "commands.h"
#include "clone.h"
#include "mud.h"
#include "log.h"
#include "logcolors.h"
extern char *Oflags[];
/* The SYSTEM command
*/
void
systemcom ()
{
char x[MAX_COM_LEN], y[MAX_COM_LEN];
if (!ptstflg (mynum, PFL_RAW) && plev (mynum) < LVL_ARCHWIZARD) {
erreval ();
return;
}
getreinput (x);
sprintf (y, "&+W[SYSTEM] &+C: &*%s&#&#\n", x);
broad (y);
send_msg (DEST_ALL, MODE_SFLAG | MS (SFL_SEEEXT), LVL_AVATAR, LVL_MAX, mynum,
NOBODY, "&+B[&+CSystem &*by &+W\001p%s\003&+B]\n", pname (mynum));
}
/* Call For Reset
*/
void
cfrcom ()
{
char x[MAX_COM_LEN], y[MAX_COM_LEN];
if (plev (mynum) < LVL_WIZARD) {
erreval ();
return;
}
getreinput (x);
sprintf (y, "&+W[Call For Reset by %s] &+C: &*%s&#&#\n", pname (mynum), x);
broad (y);
}
/* The RAW command
*/
void
rawcom ()
{
char x[MAX_COM_LEN], y[MAX_COM_LEN];
if (!ptstflg (mynum, PFL_RAW)) {
erreval ();
return;
}
getreinput (x);
sprintf (y, "&+W[\001p%s\003] &+C: &*%s&#&#\n", pname (mynum), x);
broad (y);
}
/* The TXTRAW command
*/
void
textrawcom ()
{
char x[600], y[1000], send[1600];
if (!ptstflg (mynum, PFL_TEXTRAW)) {
erreval ();
return;
}
if (my_brkword () == -1) {
bprintf ("Textraw what?");
return;
}
sprintf (x, "%s", wordbuf);
getreinput (y);
sprintf (send, "&+W[%s&+W] &+C: &+w%s&#&#\n", x, y);
broad (send);
send_msg (DEST_ALL, MODE_SFLAG | MS (SFL_SEEEXT), LVL_GOD, LVL_MAX, mynum,
NOBODY, "&+B[&+CTextRaw &*by &+W\001p%s\003&+B]\n", pname (mynum));
}
/* The TOURNAMENT Command. Toggle Tournament-mode.
*/
void
tournamentcom ()
{
if (plev (mynum) < LVL_ARCHWIZARD) {
erreval ();
return;
}
bprintf ("Tournament-mode is now &+W%s&*.\n",
(the_world->w_tournament = !the_world->w_tournament) ? "ON" : "OFF");
mudlog ("SYSTEM: Tournament mode turned %s by %s",
(the_world->w_tournament = !the_world->w_tournament) ? "On" : "Off",
pname (mynum));
send_msg (DEST_ALL, MODE_QUIET, LVL_WIZARD, LVL_MAX, mynum, NOBODY,
"&+B[&*Tournament mode turned &+C%s &*by &+W\001p%s\003&+B]\n",
(the_world->w_tournament = !the_world->w_tournament) ? "On" : "Off",
pname (mynum));
}
void
colorlog (char param[300], FILE * fp)
{
int begin, end, x, i;
if ((x = strtlookup (param, LogTable, &begin, &end)) < 0) {
fprintf (fp, "%s", param);
return;
}
for (i = 0; i < begin; i++)
fprintf (fp, "%c", param[i]);
fprintf (fp, "%s", LogColors[x]);
for (; i < end; i++)
fprintf (fp, "%c", param[i]);
fprintf (fp, "&*");
for (; i < strlen (param); i++)
fprintf (fp, "%c", param[i]);
}
void
syslogcom (void)
{
FILE *sysfp, *pagefp;
char buffer[300], search[MAX_COM_LEN], tmpbuf[300];
char *sptr, tmpname[100];
int lines = 0;
int sysloglen = fnumlines (LOG_FILE);
if (!ptstflg (mynum, PFL_SYSLOG)) {
erreval ();
return;
}
sprintf (tmpname, "TMP/Syslog.%s", pname (mynum));
if ((pagefp = fopen (tmpname, "wt")) == NULL) {
bprintf ("Error: Cannot create temporary file.");
mudlog ("ERROR: Cannot create temporary file for syslog pager");
return;
}
if ((sysfp = fopen (LOG_FILE, "rt")) == NULL) {
bprintf ("Error: Cannot read syslog file.");
mudlog ("ERROR: Cannot read syslog file.");
return;
}
if (EMPTY (txt1)) {
sptr = ctime (&global_clock);
sptr += 4;
sptr[8] = '\0';
sprintf (search, "%s", sptr);
} else {
getreinput (search);
if ((lines = atoi (search)) > 0) {
fileseek (sysfp, (sysloglen - lines));
strcpy (search, " ");
}
if (search[0] == '*') {
fileseek (sysfp, 1);
strcpy (search, " ");
}
}
while (!feof (sysfp)) {
fgets (buffer, sizeof (buffer), sysfp);
strcpy (tmpbuf, buffer);
if (strstr (uppercase (tmpbuf), uppercase (search))) {
if (!feof (sysfp)) {
colorlog (buffer, pagefp);
}
}
}
fclose (sysfp);
fclose (pagefp);
file_pager (tmpname);
unlink (tmpname);
}
/* (C) Rassilon (Brian Preble) */
void
echocom ()
{
char x[MAX_COM_LEN];
if (!ptstflg (mynum, PFL_ECHO)) {
bprintf ("You hear echos.\n");
return;
}
getreinput (x);
if (EMPTY (x)) {
bprintf ("ECHO what?\n");
return;
}
send_msg (ploc (mynum), MODE_NPFLAG | MP (PFL_NOECHO), LVL_MIN, LVL_MAX, mynum,
NOBODY, "%s\n", x);
if (ststflg (mynum, SFL_HEARBACK))
bprintf ("You echo: %s\n", x);
else
bprintf ("Ok\n");
send_msg (ploc (mynum), MODE_SFLAG | MS (SFL_SEEEXT), LVL_ARCHWIZARD, LVL_MAX, mynum,
NOBODY, "&+B[&+CEcho &*by &+W\001p%s\003&+B]\n", pname (mynum));
}
void
levechocom (void)
{
int lev;
char x[MAX_COM_LEN];
if (!ptstflg (mynum, PFL_ECHO)) {
bprintf ("You hear echos.\n");
return;
}
if (brkword () == -1) {
bprintf ("Echo to what level?\n");
return;
}
lev = atoi (wordbuf);
if (lev < 0 || lev > plev (mynum)) {
bprintf ("You cannot echo to level %d.\n", lev);
return;
}
getreinput (x);
if (EMPTY (x)) {
bprintf ("Echo what to level %d?\n", lev);
return;
}
send_msg (DEST_ALL, MODE_NPFLAG | MP (PFL_NOECHO), lev, LVL_MAX, mynum,
NOBODY, "%s\n", x);
if (ststflg (mynum, SFL_HEARBACK))
bprintf ("You lev-echoed (Lvl %d): %s\n", lev, x);
else
bprintf ("Ok\n");
send_msg (DEST_ALL, MODE_SFLAG | MS (SFL_SEEEXT), LVL_ARCHWIZARD, LVL_MAX, mynum,
NOBODY, "&+B[&+CLevecho (%d) &*by &+W\001p%s\003&+B]\n", lev, pname (mynum));
}
/* (C) Rassilon (Brian Preble) */
void
echoallcom ()
{
char x[MAX_COM_LEN];
if (!ptstflg (mynum, PFL_ECHO)) {
bprintf ("You hear echos.\n");
return;
}
getreinput (x);
if (EMPTY (x)) {
bprintf ("Echo what?\n");
return;
}
send_msg (DEST_ALL, MODE_NPFLAG | MP (PFL_NOECHO), LVL_MIN, LVL_MAX, mynum,
NOBODY, "%s\n", x);
if (ststflg (mynum, SFL_HEARBACK))
bprintf ("You echoall: %s\n", x);
else
bprintf ("Ok\n");
send_msg (DEST_ALL, MODE_SFLAG | MS (SFL_SEEEXT), LVL_ARCHWIZARD, LVL_MAX,
mynum, NOBODY, "&+B[&+CEchoall &*by &+W\001p%s\003&+B]\n", pname (mynum));
}
/* (C) Rassilon (Brian Preble) */
void
echotocom ()
{
int b;
if (!ptstflg (mynum, PFL_ECHO)) {
bprintf ("You hear echos.\n");
return;
}
if (EMPTY (item1)) {
bprintf ("Echo to who?\n");
return;
}
if ((b = pl1) == -1) {
bprintf ("No one with that name is playing.\n");
return;
}
if (b == mynum) {
bprintf ("What's the point?\n");
return;
}
if (EMPTY (txt2)) {
bprintf ("What do you want to echo to them?\n");
return;
}
if (EQ (pname (mynum), "Oracle"))
if (strstr (txt2, "tells you") && ststflg (b, SFL_NOORACLE))
return;
if (check_busy (b))
return;
send_msg (b, MODE_NPFLAG | MP (PFL_NOECHO), LVL_MIN, LVL_MAX, NOBODY, NOBODY,
"%s\n", txt2);
if (ststflg (mynum, SFL_HEARBACK))
bprintf ("You echoto: %s\n", txt2);
else
bprintf ("Ok\n");
if (!EQ (pname (mynum), "Inego"))
send_msg (DEST_ALL, MODE_SFLAG | MS (SFL_SEEEXT), LVL_GOD, LVL_MAX,
mynum, NOBODY, "&+B[&+CEchoto to &+W\001p%s\003 &*by "
"&+W\001p%s\003&+B]\n", pname (b), pname (mynum));
}
/* (C) Jim Finnis (Yes he really did write one or two routines/A) */
void
emotecom ()
{
char buff[MAX_COM_LEN + 10];
if (!ptstflg (mynum, PFL_EMOTE) && !ltstflg (ploc (mynum), LFL_PARTY)) {
bprintf ("Your emotions are strictly limited!\n");
return;
}
if (EMPTY (item1)) {
bprintf ("What do you want to emote?\n");
return;
}
getreinput (buff);
send_msg (ploc (mynum), 0, LVL_MIN, LVL_MAX, mynum, NOBODY,
"\001p%s\003 %s\n", pname (mynum), buff);
if (ststflg (mynum, SFL_HEARBACK))
bprintf ("You emote: '%s %s'\n", pname (mynum), buff);
else
bprintf ("Ok\n");
}
/* (C) Rassilon (Brian Preble) */
void
emotetocom ()
{
int a;
if (!ptstflg (mynum, PFL_EMOTE)
&& !ltstflg (ploc (mynum), LFL_PARTY)) {
bprintf ("Your emotions are strictly limited!\n");
return;
}
if (EMPTY (item1)) {
bprintf ("Emote to who?\n");
return;
}
if ((a = pl1) == -1) {
bprintf ("No one with that name is playing.\n");
return;
}
if (a == mynum) {
bprintf ("Good trick, that.\n");
return;
}
if (EMPTY (txt2)) {
bprintf ("Emote what?\n");
return;
}
if (check_busy (a))
return;
sillytp (a, txt2);
if (ststflg (mynum, SFL_HEARBACK))
bprintf ("Your emoteto looked like: %s %s\n", pname (mynum), txt2);
else
bprintf ("Ok\n");
}
/* The SET command
*/
/* These properties require numbers:
*/
#define SET_BVALUE 0
#define SET_SIZE 1
#define SET_VIS 2
#define SET_DAMAGE 3
#define SET_ARMOR 4
#define SET_STATE 5
/* These require texts:
*/
#define SET_TEXT_MIN 5
#define SET_DESC0 6
#define SET_DESC1 7
#define SET_DESC2 8
#define SET_DESC3 9
#define SET_NAME 10
#define SET_ANAME 11
#define SET_TEXT_MAX 11
/* Properties
*/
static char *Props[] =
{"BaseValue", "Size", "Visibility", "Damage",
"AC", "State", "Desc0", "Desc1",
"Desc2", "Desc3", "Name", "AltName",
TABLE_END
};
void
setcom ()
{
int o, p, v; /* Object, Property, Value */
Boolean is_oflag;
if (!ptstflg (mynum, PFL_OBJECT)) {
erreval ();
return;
}
if (brkword () == -1 || (o = fobn (wordbuf)) == -1) {
bprintf ("Set what??\n");
return;
}
if (brkword () == -1 || ((is_oflag = (p = tlookup (wordbuf, Props)) == -1)
&& (p = tlookup (wordbuf, Oflags)) == -1)) {
bprintf ("Set what property on the %s?\n", oname (o));
return;
}
if ((is_oflag || p <= SET_TEXT_MIN || p > SET_TEXT_MAX)
&& brkword () == -1) {
bprintf ("Set the %s property to what ??\n",
is_oflag ? Oflags[p] : Props[p]);
return;
}
if (is_oflag) {
if ((v = tlookup (wordbuf, OO)) == -1
&& (v = tlookup (wordbuf, TF)) == -1) {
bprintf ("Value must be On or Off (or True/False).\n");
return;
}
if (v) {
osetbit (o, p);
} else {
oclrbit (o, p);
}
} else if (p <= SET_TEXT_MIN || p > SET_TEXT_MAX) {
int limit = -1;
if (!isdigit (*wordbuf)) {
bprintf ("Value must be a number >= 0.\n");
return;
} else
v = atoi (wordbuf);
switch (p) {
case SET_BVALUE:
if (v > O_BVALUE_MAX ||
(v > obaseval (o) && v > 400
&& !ptstflg (mynum, PFL_FROB)))
limit = O_BVALUE_MAX;
else
osetbaseval (o, v);
break;
case SET_SIZE:
if (v > O_SIZE_MAX)
limit = O_SIZE_MAX;
else
osetsize (o, v);
break;
case SET_VIS:
if (v > O_VIS_MAX)
limit = O_VIS_MAX;
else
osetvis (o, v);
break;
case SET_DAMAGE:
if (v > O_DAM_MAX)
limit = O_DAM_MAX;
else
osetdamage (o, v);
break;
case SET_ARMOR:
if (v > O_ARMOR_MAX)
limit = O_ARMOR_MAX;
else
osetarmor (o, v);
break;
case SET_STATE:
if (v > omaxstate (o))
limit = omaxstate (o);
else
setobjstate (o, v);
break;
default:
bprintf ("Internal error\n");
mudlog ("ERROR: Internal errror in setcom(): p = %d", p);
return;
}
if (limit > -1) {
bprintf ("Sorry, value must be <= %d.\n", limit);
return;
}
} else {
char **q;
if (opermanent (o)) {
bprintf ("You can only change %s on non-permanent"
" (wiz-created) objects.\n", Props[p]);
return;
}
q = p == SET_DESC0 ? &olongt (o, 0)
: p == SET_DESC1 ? &olongt (o, 1)
: p == SET_DESC2 ? &olongt (o, 2)
: p == SET_DESC3 ? &olongt (o, 3)
: p == SET_NAME ? &oname (o)
: p == SET_ANAME ? &oaltname (o)
: NULL;
if (q == NULL) {
bprintf ("Internal Error\n");
mudlog ("ERROR: Internal error in setcom(), p = %d", p);
return;
}
if (strchr (getreinput (wordbuf), '^') != NULL) {
bprintf ("Illegal character(s) (^) in text.\n");
return;
}
if (p == SET_NAME || p == SET_ANAME) {
char *s = wordbuf;
if (strlen (wordbuf) > ONAME_LEN) {
bprintf ("Name too long. Max = %d chars.\n",
ONAME_LEN);
return;
}
while (*s != '\0' && isalpha (*s))
s++;
if (*s != '\0') {
bprintf ("Name must only contain latters.\n");
return;
}
if (is_classname (wordbuf)) {
bprintf ("That's the name of a object-class\n");
return;
}
if (EMPTY (wordbuf)) {
if (p == SET_ANAME)
strcpy (wordbuf, "<null>");
else {
bprintf ("Name is missing.\n");
return;
}
}
}
if (*q != NULL)
FREE (*q);
*q = COPY (wordbuf);
}
bprintf ("Ok.\n");
}
/* The SAVESET command.
*/
void
saveset ()
{
SETIN_REC s;
if (plev (mynum) < LVL_WIZARD) {
erreval ();
return;
}
if (cur_player->aliased || cur_player->polymorphed != -1) {
bprintf ("Not while aliased.\n");
return;
}
strcpy (s.name, pname (mynum));
strcpy (s.prompt, cur_player->prompt);
strcpy (s.setin, cur_player->setin);
strcpy (s.setout, cur_player->setout);
strcpy (s.setmin, cur_player->setmin);
strcpy (s.setmout, cur_player->setmout);
strcpy (s.setvin, cur_player->setvin);
strcpy (s.setvout, cur_player->setvout);
strcpy (s.setqin, cur_player->setqin);
strcpy (s.setqout, cur_player->setqout);
strcpy (s.setsit, cur_player->setsit);
strcpy (s.setstand, cur_player->setstand);
strcpy (s.setsum, cur_player->setsum);
strcpy (s.setsumin, cur_player->setsumin);
strcpy (s.setsumout, cur_player->setsumout);
putsetins (pname (mynum), &s);
bprintf ("Saving prompt and set*in/out messages.\n");
}
void
exorcom ()
{
int x, q, y = real_mynum;
if (!ptstflg (mynum, PFL_EXOR)) {
bprintf ("You couldn't exorcise your way out of a paper bag.\n");
return;
}
if (EMPTY (item1)) {
bprintf ("Exorcise who?\n");
return;
}
if ((x = pl1) == -1) {
bprintf ("They aren't playing.\n");
return;
}
if (!do_okay (mynum, x, PFL_NOEXOR)) {
bprintf ("They don't want to be exorcised.\n");
return;
}
if (x < max_players)
mudlog ("SYSTEM: %s exorcised %s", pname (mynum), pname (x));
send_msg (DEST_ALL, MODE_QUIET, pvis (x), LVL_MAX, x, NOBODY,
"%s has been kicked off.\n", pname (x));
send_msg (DEST_ALL, MODE_SFLAG | MS (SFL_SEEEXT), LVL_WIZARD, LVL_MAX,
mynum, x, "&+B[&+W\001p%s\003 &*has exorcised &+W\001p%s\003&+B]\n",
pname (mynum), pname (x));
if ((q = find_pretender (x)) >= 0) {
sendf (q, "You have been kicked off!\n");
unalias (q);
unpolymorph (q);
}
if (x >= max_players) {
dumpstuff (x, ploc (x));
setpfighting (x, -1);
if (!ppermanent (x)) {
destruct_mobile (x, NULL);
} else {
setpname (x, "");
}
} else {
setup_globals (x);
crapup ("\tYou have been kicked off!\n", CRAP_SAVE | CRAP_RETURN);
setup_globals (y);
}
}
void
setstart (void)
{
PERSONA d;
int loc, p;
char buff[80];
char *who;
char *where;
if (plev (mynum) < LVL_WIZARD) {
erreval ();
return;
}
/* Parse the command, find *WHO*'s home we want to change and *WHERE*
* * to change it to.
*/
if (brkword () == -1) {
who = pname (mynum);
where = NULL;
} else if (getuaf (strcpy (buff, wordbuf), &d)) {
who = d.p_name;
where = (brkword () == -1) ? NULL : wordbuf;
if (!EQ (who, pname (mynum))) {
if (!ptstflg (mynum, PFL_UAF)) {
bprintf ("You can only set your own start-location.\n");
return;
}
if (!do_okay_l (plev (mynum), d.p_level, False)) {
bprintf ("That is beyond your powers.\n");
return;
}
}
} else if (brkword () == -1) {
who = pname (mynum);
where = buff;
} else {
bprintf ("No such player: %s\n", buff);
return;
}
/* Got the arguments. If the operation is not 'erase home' (where=null),
* * see if the argument corresponds to a real room.
*/
if (where == NULL) {
loc = 0;
} else if ((loc = findroomnum (where)) == 0 || !exists (loc)) {
bprintf ("No such location.\n");
return;
}
if (exists (loc))
loc = loc_id (loc);
/* Got the room number. Finally, set the home for the player.
*/
if ((p = fpbns (who)) > -1) {
setphome (p, loc);
} else {
d.p_home = loc;
putuaf (&d);
}
bprintf ("Ok.\n");
}
void
noshoutcom ()
{
int x;
if (plev (mynum) < LVL_WIZARD) {
erreval ();
return;
}
if ((x = pl1) == -1 || x == mynum) {
if (ststflg (mynum, SFL_NOSHOUT)) {
bprintf ("You can hear shouts again.\n");
sclrflg (mynum, SFL_NOSHOUT);
send_msg (DEST_ALL, MODE_QUIET, max (pvis (mynum), LVL_WIZARD), LVL_MAX, mynum,
NOBODY, "&+B[&+W%s &*is listening to &+CShouts&+B]\n", pname (mynum));
} else {
bprintf ("From now on you won't hear shouts.\n");
ssetflg (mynum, SFL_NOSHOUT);
send_msg (DEST_ALL, MODE_QUIET, max (pvis (mynum), LVL_WIZARD), LVL_MAX, mynum,
NOBODY, "&+B[&+W%s &*is no longer listening to &+CShouts&+B]\n", pname (mynum));
}
} else if (plev (x) >= LVL_WIZARD) {
if (ststflg (x, SFL_NOSHOUT)) {
bprintf ("%s can hear shouts again.\n", pname (x));
sclrflg (x, SFL_NOSHOUT);
} else {
bprintf ("From now on %s won't hear shouts.\n", pname (x));
ssetflg (x, SFL_NOSHOUT);
}
} else if (ststflg (x, SFL_NOSHOUT)) {
bprintf ("%s is allowed to shout again.\n", pname (x));
sclrflg (x, SFL_NOSHOUT);
send_msg (DEST_ALL, MODE_QUIET, LVL_WIZARD, LVL_MAX, mynum,
NOBODY, "&+B[&+W\001p%s\003 &*has made &+W%s &*able to &+CShout&+B]\n",
pname (mynum), pname (x));
} else {
bprintf ("From now on %s cannot shout.\n", pname (x));
ssetflg (x, SFL_NOSHOUT);
send_msg (DEST_ALL, MODE_QUIET, LVL_WIZARD, LVL_MAX, mynum,
NOBODY, "&+B[&+W\001p%s\003 &*has made &+W%s &*unable to &+CShout&+B]\n",
pname (mynum), pname (x));
}
}
void
showlocation (int o)
{
int uc, gotroom;
uc = 1;
gotroom = 0;
while (!gotroom) {
switch (ocarrf (o)) {
case IN_ROOM:
o = oloc (o);
gotroom = 1;
break;
case IN_CONTAINER:
bprintf (" %cnside the %s", (uc ? 'I' : 'i'), oname (oloc (o)));
uc = 0;
o = oloc (o);
break;
case CARRIED_BY:
bprintf (" %carried by %s", (uc ? 'C' : 'c'), pname (oloc (o)));
uc = 0;
o = ploc (oloc (o));
gotroom = 1;
break;
case WORN_BY:
bprintf (" %corn by %s", (uc ? 'W' : 'w'), pname (oloc (o)));
uc = 0;
o = ploc (oloc (o));
gotroom = 1;
break;
case WIELDED_BY:
bprintf (" %cielded by %s", (uc ? 'W' : 'w'), pname (oloc (o)));
uc = 0;
o = ploc (oloc (o));
gotroom = 1;
break;
case BOTH_BY:
bprintf (" %corn and wielded by %s", (uc ? 'W' : 'w'), pname (oloc (o)));
uc = 0;
o = ploc (oloc (o));
gotroom = 1;
break;
default:
bprintf ("\n");
return;
}
}
bprintf (" %cn ", (uc ? 'I' : 'i'));
bprintf ("%s\n", showname (o));
}
/* The SHOW command.
*/
void
showitem ()
{
int x, i;
OFLAGS *p;
if (!ptstflg (mynum, PFL_STATS)) {
erreval ();
return;
}
if (EMPTY (item1)) {
bprintf ("Show what?\n");
return;
}
if ((x = fobn (item1)) == -1) {
bprintf ("What's that?\n");
return;
}
bprintf ("\nItem [%d]: %s", x, oname (x));
if (!EQ (oaltname (x), "<null>"))
bprintf (" (%s)", oaltname (x));
bprintf ("\nLocation: ");
showlocation (x);
if (olinked (x) > -1) {
bprintf ("Linked to: ");
if (olinked (x) >= numobs)
bprintf ("non-existant object! (%d)", olinked (x));
else {
bprintf ("%s", oname (olinked (x)));
if (olinked (olinked (x)) != x)
bprintf (" ERROR: Not linked back! (%d)\n",
olinked (olinked (x)));
else
showlocation (olinked (x));
}
}
bprintf ("Zone/Owner: %s\n", zname (ozone (x)));
bprintf ("\nState: %d\tMax State: %d\tVis Level: %d\n",
state (x), omaxstate (x), ovis (x));
bprintf ("Damage: %d\tArmor Class: %d\t\tSize: %d\n",
odamage (x), oarmor (x), osize (x));
bprintf ("Base Value: %-4d\t\tCurrent Value: %d\n\n",
obaseval (x), ovalue (x));
bprintf ("Properties: ");
p = &(obits (x));
show_bits ((int *) p, sizeof (OFLAGS) / sizeof (int), Oflags);
bprintf ("\nState Description:\n");
for (i = 0; i < 4; i++) {
bprintf ("[%d] %s\n", i, olongt (x, i) == NULL ? "" : olongt (x, i));
}
}
void
wizlock ()
{
extern char *WizLevels[];
extern char *MLevels[];
extern char *FLevels[];
static int k[] =
{0, LVL_WIZARD, LVL_DORQ, LVL_EMERITI, LVL_FULLWIZ,
LVL_PROPHET, LVL_ARCHWIZARD, LVL_ADVISOR, LVL_AVATAR,
LVL_GOD, LVL_MASTER};
char s[80];
char b[50];
int l, v, n, x, y;
l = the_world->w_lock;
if (brkword () == -1) {
bprintf ("The game is currently %slocked.\n", lev2s (b, l));
return;
}
if (!ptstflg (mynum, PFL_LOCK) || (v = plev (mynum)) <= 0) {
erreval ();
return;
}
if (l > v || (v > LVL_WIZARD && l > k[wlevel (v)])) {
bprintf ("Sorry, the game is already %slocked.\n", lev2s (b, l));
return;
}
y = strlen (wordbuf);
if (strncasecmp (wordbuf, "Off", y) == 0
|| strncasecmp (wordbuf, "Unlock", y) == 0) {
n = 0;
} else if ((x = tlookup (wordbuf, WizLevels)) > 0) {
n = k[x];
} else if ((x = tlookup (wordbuf, MLevels)) > 0) {
n = x;
} else if ((x = tlookup (wordbuf, FLevels)) > 0) {
n = x;
} else if (isdigit (*wordbuf)) {
n = atoi (wordbuf);
} else {
bprintf ("Illegal argument to wizlock command.\n");
return;
}
if (n > v || (v > LVL_WIZARD && n > k[wlevel (v)])) {
bprintf ("You can't %slock the game!\n", lev2s (b, n));
return;
}
the_world->w_lock = n;
sprintf (s, "&+W[SYSTEM] &+C: &*The Game is now %slocked.&#&#\n", lev2s (b, n));
broad (s);
send_msg (DEST_ALL, MODE_SFLAG | MS (SFL_SEEEXT), LVL_WIZARD, LVL_MAX,
mynum, NOBODY, "&+B[&+CWizlock &*by &+W\001p%s\003&+B]\n",
pname (mynum));
}
void
warcom ()
{
if (plev (mynum) < LVL_WIZARD) {
erreval ();
return;
}
the_world->w_peace = 0;
broad ("The air of peace and friendship lifts.\n");
}
void
peacecom ()
{
int m;
if (plev (mynum) < LVL_WIZARD) {
erreval ();
return;
}
the_world->w_peace = 1;
for (m = 0; m < max_players; m++) {
setpfighting (m, -1);
}
broad ("Peace and tranquility descend upon the world.\n");
}
void
tracecom (void)
{
int i;
if (!ptstflg (mynum, PFL_TRACE)) {
erreval ();
return;
}
if (cur_player->Trace.trace != -1) {
bprintf ("Stopped tracing %s (%d).\n", cur_player->Trace.is_obj ?
oname (cur_player->Trace.trace) :
pname (cur_player->Trace.trace - GLOBAL_MAX_OBJS),
cur_player->Trace.trace);
cur_player->Trace.trace = -2;
}
if (EMPTY (item1)) {
if (cur_player->Trace.trace == -2)
cur_player->Trace.trace = -1;
else
bprintf ("Trace what?\n");
return;
}
if ((i = fpbn (item1)) != -1) {
if (!do_okay (mynum, i, PFL_NOTRACE)) {
bprintf ("They don't want to be traced.\n");
return;
}
cur_player->Trace.is_obj = False;
cur_player->Trace.loc = ploc (i);
cur_player->Trace.trace = i;
bprintf ("You are now tracing %s (%d).\n", pname (i),
cur_player->Trace.trace);
return;
}
if ((i = fobn (item1)) != -1) {
cur_player->Trace.is_obj = True;
cur_player->Trace.loc = oloc (i);
cur_player->Trace.oloc = getobjloc (i);
cur_player->Trace.carry = ocarrf (i);
cur_player->Trace.trace = i;
bprintf ("You are now tracing %s (%d).\n", oname (i),
cur_player->Trace.trace);
return;
}
bprintf ("What's that?\n");
}
void
zapcom (void)
{
int vic, x;
if (!ptstflg (mynum, PFL_ZAP)) {
bprintf ("The spell fails.\n");
return;
}
if (brkword () == -1) {
bprintf ("Zap who?\n");
return;
}
if ((vic = pl1) == -1) {
bprintf ("There is no one on with that name.\n");
return;
}
/* Message to everyone in the same room */
send_msg (ploc (vic), 0, pvis (vic), LVL_MAX, vic, NOBODY,
"A massive lightning bolt strikes \001p%s\003!",
pname (vic));
if (!do_okay (mynum, vic, PFL_NOZAP)) {
sendf (vic, "%s casts a lightning bolt at you!\n",
see_player (vic, mynum) ? pname (mynum) : "Someone");
} else {
sendf (vic, "A massive lightning bolt arcs down out of "
"the sky to strike you between\nthe eyes!\n"
"You have been utterly destroyed by %s.\n",
see_player (vic, mynum) ? pname (mynum) : "Someone");
if (vic < max_players) {
mudlog ("ZAP: %s zapped %s", pname (mynum), pname (vic));
if (plev (vic) >= LVL_WIZARD) {
update_wizlist (pname (vic), LEV_MORTAL);
}
deluaf (pname (vic));
send_msg (ploc (vic), 0, pvis (vic), LVL_MAX, vic, NOBODY,
"\001s%s\003%s has just died.\n\003",
pname (vic), pname (vic));
/* Send info-msg. to wizards */
send_msg (DEST_ALL, 0, LVL_WIZARD, LVL_MAX, vic, NOBODY,
"&+B[&+W\001p%s\003 &*has &+Czapped &+W\001p%s\003&+B]\n",
pname (mynum), pname (vic));
x = real_mynum;
setup_globals (vic);
crapup ("\t\tBye Bye.... Slain by a Thunderbolt\n", CRAP_RETURN);
setup_globals (x);
} else {
wound_player (mynum, vic, pstr (vic) + 1, VERB_ZAP);
}
}
broad ("\001dYou hear an ominous clap of thunder in the distance.\n\002");
}
void
pzapcom (void)
{
int vic, x;
if (!ptstflg (mynum, PFL_PZAP)) {
bprintf ("Pardon?\n");
return;
}
if (brkword () == -1) {
bprintf ("P-Zap who?\n");
return;
}
if ((vic = pl1) == -1) {
bprintf ("There is no one on with that name.\n");
return;
}
/* Message to everyone in the same room */
send_msg (ploc (vic), 0, pvis (vic), LVL_MAX, vic, NOBODY,
"\001A\033[1m\003\001cA massive lightning "
"bolt strikes \003\001D%s\003\001c!\n\003\001A\033[0m\003",
pname (vic));
if (!do_okay (mynum, vic, PFL_NOZAP)) {
sendf (vic, "%s casts a lightning bolt at you!\n",
see_player (vic, mynum) ? pname (mynum) : "Someone");
} else {
sendf (vic, "\001A\033[1m\003A massive lightning bolt arcs down out of "
"the sky to strike you between\nthe eyes!\001A\033[0m\003\n"
"You have been utterly destroyed by %s.\n",
see_player (vic, mynum) ? pname (mynum) : "Someone");
if (vic < max_players) {
mudlog ("PZAP: %s P-zapped %s", pname (mynum), pname (vic));
send_msg (ploc (vic), 0, pvis (vic), LVL_MAX, vic, NOBODY,
"\001s%s\003%s has just died.\n\003",
pname (vic), pname (vic));
/* Send info-msg. to wizards */
send_msg (DEST_ALL, MODE_NPFLAG | MP (PFL_PZAP), LVL_WIZARD, LVL_MAX, vic, NOBODY,
"&+B[&+W\001p%s\003 &*has &+Czapped &+W\001p%s\003&+B]\n",
pname (mynum), pname (vic));
send_msg (DEST_ALL, MODE_PFLAG | MP (PFL_PZAP), LVL_WIZARD, LVL_MAX, vic, NOBODY,
"&+B[&+W\001p%s\003 &*has &+CP-zapped &+W\001p%s\003&+B]\n",
pname (mynum), pname (vic));
x = real_mynum;
setup_globals (vic);
crapup ("\t\tBye Bye.... Slain by a Thunderbolt\n", CRAP_RETURN);
setup_globals (x);
} else {
wound_player (mynum, vic, pstr (vic) + 1, VERB_ZAP);
}
}
broad ("\001dYou hear an ominous clap of thunder in the distance.\n\002");
}
/* The TTY command. Displays hostnames.
*/
void
ttycom (void)
{
char *z, header[100], time_online[25];
int pos, i, a[256], a_len = 0;
if (!ptstflg (mynum, PFL_SHUSER)) {
erreval ();
return;
}
if (brkword () != -1) {
if ((i = fpbn (wordbuf)) >= 0) {
if (i >= max_players) {
bprintf ("A mobile doesn't have a host.\n");
return;
}
z = ctime (&plogged_on (i));
z[19] = '\0';
for (pos = 0; pos < 15; pos++)
time_online[pos] = z[pos + 4];
time_online[pos] = '\0';
bprintf ("&+WPlayer : &+C%s\n", pname (i));
bprintf ("&+WHostname : &+C%s\n",
!ptstflg (mynum, PFL_SEEUSER) ? players[i].hostname : players[i].usrname);
bprintf ("&+WOn Since : &+C%s\n", time_online);
return;
} else {
bprintf ("Cannot find player.\n");
return;
}
}
for (i = 0; i < max_players; i++)
if (is_in_game (i) && (pvis (i) <= plev (mynum) || i == mynum))
a[a_len++] = i;
qsort (a, a_len, sizeof (int), cmp_player);
sprintf (header, "%-*s %-38s %15.15s %8.8s",
PNAME_LEN,
"Player",
"Hostname",
"On Since",
"On For");
bprintf ("&+C%s\n", header);
bprintf ("&+c-------------------------------------------------------------------------------\n");
for (i = 0; i < a_len; ++i) {
z = ctime (&plogged_on (a[i]));
z[19] = '\0';
for (pos = 0; pos < 15; pos++)
time_online[pos] = z[pos + 4];
time_online[pos] = '\0';
bprintf ("&+w%-*s %-38.38s %15.15s %8.8s\n",
PNAME_LEN,
pname (a[i]),
!ptstflg (mynum, PFL_SEEUSER) ? players[a[i]].hostname : players[a[i]].usrname,
time_online,
sec_to_hhmmss (global_clock - plogged_on (a[i])));
}
bprintf ("&+c-------------------------------------------------------------------------------\n");
}
void
toutcom (void)
{
int a;
if (!ptstflg (mynum, PFL_TIMEOUT)) {
bprintf ("Pardon?\n");
return;
}
if (brkword () == -1) {
bprintf ("Who?\n");
return;
}
if ((a = fpbn (wordbuf)) == -1) {
bprintf ("Who?\n");
return;
}
if (a >= max_players) {
bprintf ("Timeout a mobile? Why? What's the point?\n");
return;
}
if (ptstflg (a, PFL_NOTIMEOUT) && a != mynum) {
bprintf ("Something prevents you from doing this to that person.\n");
return;
}
mudlog ("TOUT: %s has tout'd %s", pname (mynum), pname (a));
send_msg (DEST_ALL, MODE_PFLAG | MP (PFL_TIMEOUT), LVL_WIZARD, LVL_MAX, a, mynum,
"&+B[&+W\001p%s\003 &+whas tout'd &+W\001p%s\003&+B]\n",
pname (mynum), pname (a));
send_msg (DEST_ALL, MODE_NPFLAG | MP (PFL_TIMEOUT), LVL_MIN, LVL_MAX, a, mynum,
"&+B[&+W\001p%s\003 &+whas timed-out&+B]\n", pname (a));
p_crapup (a, "\tYou have timed-out.\n", CRAP_SAVE | CRAP_RETURN);
}
void
nowishcom (void)
{
int a;
if (plev (mynum) < LVL_WIZARD) {
erreval ();
return;
}
if (brkword () != -1) {
if ((a = fpbn (wordbuf)) == -1) {
bprintf ("Cannot find that player.\n");
return;
}
if (plev (a) < LVL_WIZARD) {
if (ststflg (a, SFL_NOWISH)) {
bprintf ("%s can now wish for things.\n", pname (a));
sendf (a, "You are hit by a bolt of light and feel you've regained your link to the Gods.\n");
sclrflg (a, SFL_NOWISH);
send_msg (DEST_ALL, MODE_QUIET, LVL_WIZARD, LVL_MAX, mynum, NOBODY,
"&+B[&+W\001p%s\003 &*has made %s able to &+CWish&+B]\n",
pname (mynum), pname (a));
} else {
bprintf ("%s can no longer wish for things.\n", pname (a));
sendf (a, "You are hit by a bolt of light and feel you've lost your link to the Gods.\n");
ssetflg (a, SFL_NOWISH);
send_msg (DEST_ALL, MODE_QUIET, LVL_WIZARD, LVL_MAX, mynum, NOBODY,
"&+B[&+W\001p%s\003 &*has made %s unable to &+CWish&+B]\n",
pname (mynum), pname (a));
}
return;
} else {
bprintf ("You can't seem to be able to make a Wizard not listen to wishes.\n");
return;
}
}
if (ststflg (mynum, SFL_NOWISH)) {
bprintf ("You are once again listening to wishes.\n");
sclrflg (mynum, SFL_NOWISH);
send_msg (DEST_ALL, MODE_QUIET, LVL_WIZARD, LVL_MAX, mynum, NOBODY,
"&+B[&+W\001p%s\003 &*is now listening to &+CWishes&+B]\n", pname (mynum));
return;
} else {
bprintf ("You will no longer hear wishes.\n");
ssetflg (mynum, SFL_NOWISH);
send_msg (DEST_ALL, MODE_QUIET, LVL_WIZARD, LVL_MAX, mynum, NOBODY,
"&+B[&+W\001p%s\003 &*is no longer listening to &+CWishes&+B]\n", pname (mynum));
return;
}
}
void
noslaincom (void)
{
if (plev (mynum) < LVL_WIZARD) {
erreval ();
return;
}
if (ststflg (mynum, SFL_NOSLAIN)) {
bprintf ("You will see slain messages again.\n");
sclrflg (mynum, SFL_NOSLAIN);
return;
} else {
bprintf ("You will no longer see slain messages.\n");
ssetflg (mynum, SFL_NOSLAIN);
return;
}
}
void
puntcom (void)
{
int b, i, puntroom = 0;
int ok = 1;
int me = real_mynum;
char punt_to[50], buff[80];
strcpy (punt_to, "");
if (!ptstflg (mynum, PFL_PUNT)) {
bprintf ("Yeah, you WISH you could punt!\n");
return;
}
if (EMPTY (item1)) {
bprintf ("Who do you want to punt?\n");
return;
}
if (!EMPTY (item2)) {
if ((puntroom = findroomnum (item2)) == 0) {
bprintf ("Location does not exist!\n");
return;
} else {
ok = 0;
sprintf (punt_to, " to %s (%s)",
sdesc (puntroom), xshowname (buff, puntroom));
}
}
if ((b = pl1) == -1) {
bprintf ("I can't find that person.\n");
return;
}
if (b == mynum) {
bprintf ("You really want to punt yourself around? Well, have a nice "
"flight!\n");
}
if (b != mynum) {
if (ptstflg (b, PFL_NOPUNT) && plev (mynum) < LVL_GOD) {
bprintf ("A magical force prevents you from punting that person.\n");
return;
}
}
if (ok == 0) {
if (chkroom (puntroom, b)) {
bprintf ("Something will not let you punt %s there.\n", b == mynum ?
"yourself" : pname (b));
return;
}
}
while (ok != 0) {
puntroom = my_random () % num_const_locs; /* Get a random room */
puntroom = puntroom - (puntroom * 2); /* MUST be negative */
if (ltstflg (puntroom, LFL_DEATH) || /* Cannot be deathroom */
ltstflg (puntroom, LFL_ON_WATER) || /* Cannot be on water */
ltstflg (puntroom, LFL_ONE_PERSON) || /* Cannot be one-person */
ltstflg (puntroom, LFL_PRIVATE) || /* Cannot be private */
r_isdark (puntroom, b) || /* Cannot be dark */
chkroom (puntroom, b))
ok = 1;
else {
ok = 0;
}
}
for (i = 0; i < max_players; ++i) {
if (is_in_game (i) && i != mynum && i != b && ploc (b) == ploc (i)) {
if (b != mynum) {
if (ploc (mynum) == ploc (b))
sendf (i, "%s grins evilly then picks up %s and boots %s across "
"the world..\n", see_name (i, mynum), see_name (i, b),
him_or_her (b));
else
sendf (i, "%s appears, picks up %s and boots %s across the "
"world..\n", see_name (i, mynum), see_name (i, b),
him_or_her (b));
} else {
sendf (i, "\001p%s\003 boots %s across the world..\n", pname (mynum),
psex (mynum) ? "herself" : "himself");
}
}
if (is_in_game (i) && i != mynum && i != b && ploc (b) != ploc (i))
sendf (i, "%s flies overhead screaming for mercy..\n", see_name (i, b));
}
if (b != mynum) {
bprintf ("You pick up %s and boot %s across the world..\n", pname (b),
him_or_her (b));
sendf (b, "%s grins at you then picks you up and boots you across the "
"world..\n", see_name (b, mynum));
} else {
bprintf ("You pick yourself up and boot yourself around the world..\n");
}
if (b < max_players) {
setup_globals (b);
setploc (mynum, puntroom);
setup_globals (me);
} else
setploc (b, puntroom);
for (i = 0; i < max_players; ++i) {
if (is_in_game (i) && i != b && ploc (b) == ploc (i))
sendf (i, "%s lands on the ground with a loud thud.\n", see_name (i, b));
}
send_msg (DEST_ALL, MODE_SFLAG | MS (SFL_SEEEXT), LVL_WIZARD, LVL_MAX, b, mynum,
"&+B[&+W\001p%s\003 &+whas punted &+W\001p%s\003&+w%s&+B]\n",
pname (mynum), pname (b), punt_to);
}
void
puntallcom (void)
{
int b, i, puntroom;
int ok = 1;
int me = real_mynum;
b = i = puntroom = 0;
if (!ptstflg (mynum, PFL_PUNTALL)) {
bprintf ("Yeah, you WISH you could puntall!\n");
return;
}
if (!EMPTY (item1)) {
if ((puntroom = findroomnum (item1)) == 0) {
bprintf ("Location does not exist!\n");
return;
} else {
ok = 0;
}
}
if (ok == 0) {
for (i = 0; i < max_players; ++i) {
if (is_in_game (i) && i != mynum &&
wlevel (plev (mynum)) < wlevel (plev (b))) {
if (chkroom (puntroom, i)) {
bprintf ("Something will not let you puntall there.\n");
return;
}
}
}
}
send_msg (DEST_ALL, 0, LVL_MIN, LVL_MAX, mynum, NOBODY,
"\001p%s\003 gets ready to punt all of you around!\n",
pname (mynum));
bprintf ("You punt everyone around the world!\n");
if (ok == 0) {
for (i = 0; i < max_players; ++i) {
if (is_in_game (i) && i != mynum && plev (i) < LVL_MASTER) {
sendf (i, "\001p%s\003 grins evilly and boots you across the world.\n",
pname (mynum));
setup_globals (i);
setploc (mynum, puntroom);
setup_globals (me);
}
}
}
for (i = 0; i < max_players; ++i) {
if (is_in_game (i) && i != mynum && plev (i) < LVL_MASTER) {
ok = 1;
while (ok != 0) {
puntroom = my_random () % num_const_locs; /* Get a random room */
puntroom = puntroom - (puntroom * 2); /* MUST be negative */
if (ltstflg (puntroom, LFL_DEATH) ||
ltstflg (puntroom, LFL_ON_WATER) ||
ltstflg (puntroom, LFL_ONE_PERSON) ||
ltstflg (puntroom, LFL_PRIVATE) ||
r_isdark (puntroom, i) ||
chkroom (puntroom, i))
ok = 1;
else {
ok = 0;
sendf (i, "\001p%s\003 grins evilly and boots you across the "
"world.\n", pname (mynum));
setup_globals (i);
setploc (mynum, puntroom);
setup_globals (me);
}
}
}
}
send_msg (DEST_ALL, MODE_SFLAG | MS (SFL_SEEEXT), LVL_WIZARD, LVL_MAX, b, mynum,
"&+B[&+CPuntAll &*by &+W\001p%s\003&+B]\n", pname (mynum));
}
void
litcom ()
{
if (plev (mynum) < LVL_WIZARD) {
erreval ();
return;
}
if (!ststflg (mynum, SFL_LIT)) {
ssetflg (mynum, SFL_LIT);
bprintf ("You are now lit.\n");
} else {
sclrflg (mynum, SFL_LIT);
bprintf ("You are no longer lit.\n");
}
}
void
burncom (void)
{
int vic, x = real_mynum;
if (!ptstflg (mynum, PFL_BURN)) {
bprintf ("The spell fails.\n");
return;
}
if (brkword () == -1) {
bprintf ("Burn who?\n");
return;
}
if ((vic = pl1) == -1) {
bprintf ("There is no one on with that name.\n");
return;
}
if (!do_okay (mynum, vic, PFL_NOBURN)) {
bprintf ("You can't send that person to hell!\n");
return;
}
send_msg (DEST_ALL, 0, pvis (vic), LVL_MAX, vic, NOBODY,
"Screams are heard in the distance as %s is sent to hell..\n",
pname (vic));
sendf (vic, "You are ripped up and thrown into hell by \001p%s\003..\n",
pname (mynum));
if (vic < max_players)
mudlog ("BURN: %s has burned %s", pname (mynum), pname (vic));
send_msg (DEST_ALL, 0, LVL_MIN, LVL_MAX, vic, NOBODY,
"&+W\001p%s\003 &*has &+Rpissed off &*the &+WGods&*, and has been sent to burn in &+rhell&*!\n",
pname (vic));
send_msg (DEST_ALL, 0, LVL_WIZARD, LVL_MAX, vic, NOBODY,
"&+B[&+W\001p%s\003 &+whas burned &+W\001p%s\003&+B]\n",
pname (mynum), pname (vic));
if (vic < max_players) {
setplev (vic, 1);
setpscore (vic, 0);
set_xpflags (1, &pflags (vic), &pmask (vic));
setploc (vic, LOC_LIMBO_HELL);
setup_globals (vic);
trapch (ploc (mynum));
setup_globals (x);
}
}
void
follist (void)
{
int i, j;
int a[256], a_len = 0;
int me = real_mynum;
if (plev (mynum) < LVL_WIZARD) {
erreval ();
return;
}
for (i = 0; i < max_players; ++i)
if (is_in_game (i) && (pvis (i) <= plev (me) || i == me) && pfollow (i) != -1)
a[a_len++] = i;
if (a_len == 0) {
bprintf ("&+WThere are currently no players using follow.\n");
return;
}
qsort (a, a_len, sizeof (int), cmp_player);
bprintf ("&+WName Str/Max DP AC Following Str/Max DP AC\n");
bprintf ("&+B-----------------------------------------------------------------------\n");
for (i = 0; i < a_len; ++i) {
j = pfollow (a[i]);
bprintf ("&+w%-15s %3d/%-3d %2d %2d %-15s %3d/%-3d %2d %2d\n",
pname (a[i]), pstr (a[i]), maxstrength (a[i]), player_damage (a[i]),
player_armor (a[i]), pname (j), pstr (j), maxstrength (j),
player_damage (j), player_armor (j));
}
bprintf ("&+B-----------------------------------------------------------------------\n");
}
void
toggleseeext (void)
{
if (plev (mynum) < LVL_WIZARD) {
erreval ();
return;
}
if (!ststflg (mynum, SFL_SEEEXT)) {
ssetflg (mynum, SFL_SEEEXT);
bprintf ("Extended Messages Enabled\n");
} else {
sclrflg (mynum, SFL_SEEEXT);
bprintf ("Extended Messages Disabled\n");
}
}
/* findloccom()
* 1995 by Sithel
*
* Changed to findcom() by Illusion.
* findcom() not only finds locations, it will now look for objects,
* players, and mobiles.
*/
void
findcom (void)
{
int i, j;
int plr = 0, mob = 0, obj = 0, loc = 0;
char pln[256];
char sst[MAX_COM_LEN];
char tmp[256];
getreinput (sst);
if (plev (mynum) < LVL_WIZARD) {
bprintf ("Pardon?\n");
return;
}
if (EMPTY (txt1)) {
bprintf ("What text are you looking for?\n");
return;
}
bprintf ("&+WType %-40.40s %-18.18s Number\n", "Name", "Location");
bprintf ("&+B-------------------------------------------------------------------------------\n");
for (i = 0; i < max_players; i++) {
strcpy (tmp, pname (i));
if (strstr (uppercase (tmp), uppercase (sst)) && see_player (mynum, i)) {
++plr;
bprintf ("&+W(Plr) &+w%-40.40s %-18.18s %d\n",
pname (i), xshowname (pln, ploc (i)), GLOBAL_MAX_OBJS + i);
}
}
for (i = max_players; i < numchars; i++) {
strcpy (tmp, pname (i));
if (strstr (uppercase (tmp), uppercase (sst)) && see_player (mynum, i)) {
++mob;
bprintf ("&+W(Mob) &+w%-40.40s %-18.18s %d\n",
pname (i), xshowname (pln, ploc (i)), GLOBAL_MAX_OBJS + i);
}
}
for (i = 0; i < numobs; ++i) {
strcpy (tmp, oname (i));
if (strstr (uppercase (tmp), uppercase (sst)) && (ovis (i) <= plev (mynum))) {
++obj;
bprintf ("&+W(Obj) &+w%-40.40s %-18.18s %d\n", oname (i), odescrm (i), i);
}
}
for (i = 0; i < numzon; i++)
for (j = zfirst_loc (i); j != SET_END; j = znext_loc (i)) {
strcpy (tmp, sdesc (j));
if (strstr (uppercase (tmp), uppercase (sst))) {
++loc;
bprintf ("&+W(Loc) &+w%-40.40s %-18.18s %d\n", sdesc (j), xshowname (pln, j), j);
}
}
bprintf ("&+B-------------------------------------------------------------------------------\n");
if (plr)
bprintf ("&+wPlayers: &+W%d ", plr);
if (mob)
bprintf ("&+wMobiles: &+W%d ", mob);
if (obj)
bprintf ("&+wObjects: &+W%d ", obj);
if (loc)
bprintf ("&+wLocations: &+W%d ", loc);
if (!plr && !mob && !obj && !loc)
bprintf ("&+wNothing was found with that text.");
bprintf ("\n");
}
void
nopuntcom (void)
{
if (!ptstmsk (mynum, PFL_NOPUNT)) {
erreval ();
return;
}
if (ptstflg (mynum, PFL_NOPUNT)) {
bprintf ("NoPunt Disabled\n");
pclrflg (mynum, PFL_NOPUNT);
} else {
bprintf ("NoPunt Enabled\n");
psetflg (mynum, PFL_NOPUNT);
}
}
void
fakequitcom (void)
{
static char *QuitTable[] =
{
"list", "quit", "cut", "net1", "net2", "net3", "net4",
"net5", "net6", "net7", TABLE_END
};
static int vislev[] =
{
0, LVL_PROPHET, LVL_PROPHET, LVL_PROPHET,
LVL_PROPHET, LVL_ARCHWIZARD, LVL_ADVISOR,
LVL_AVATAR, LVL_GOD, LVL_MASTER, LVL_MAX
};
int x, maxlev = vislev[wlevel (plev (mynum))];
int wlev = wlevel (plev (mynum));
char b[100], xx[SETIN_MAX + 100];
if (plev (mynum) < LVL_WIZARD) {
bprintf ("Pardon?\n");
return;
}
if (brkword () == -1) {
x = 1;
} else {
if ((x = tlookup (wordbuf, QuitTable)) < 0) {
bprintf ("Use which message? (LIST for listing)\n");
return;
}
if (wlev == LEV_WIZARD && x > 1) {
bprintf ("Use which message? (LIST for listing)\n");
return;
}
if (wlev == LEV_PROPHET && x > 2) {
bprintf ("Use which message? (LIST for listing)\n");
return;
}
if (wlev == LEV_ARCHWIZARD && x > 4) {
bprintf ("Use which message? (LIST for listing)\n");
return;
}
}
switch (x) {
case 0:
bprintf ("FakeQuit Listing\n");
bprintf ("--------------------------------------\n");
bprintf ("QUIT : Regular quit message\n");
if (wlev < LEV_PROPHET)
return;
bprintf ("CUT : Connection lost (cut) message\n");
if (wlev < LEV_ARCHWIZARD)
return;
bprintf ("NET1 : Connection Reset by Peer (ECONNRESET)\n");
bprintf ("NET2 : No Route to Host (EHOSTUNREACH)\n");
bprintf ("NET3 : Connection Timed Out (ETIMEDOUT)\n");
if (wlev < LEV_ADVISOR)
return;
bprintf ("NET4 : Network Unreachable (ENETUNREACH)\n");
bprintf ("NET5 : Network Dropped Connection on Reset (ENETRESET)\n");
bprintf ("NET6 : Network is Down (ENETDOWN)\n");
bprintf ("NET7 : Empty Packets\n");
return;
case 1:
send_msg (ploc (mynum), 0, pvis (mynum), LVL_MAX, mynum, NOBODY,
"%s\n", build_setin (xx, cur_player->setqout, pname (mynum),
NULL, NULL));
send_msg (DEST_ALL, MODE_QUIET, max (pvis (mynum), LVL_WIZARD),
LVL_MAX, mynum, NOBODY, "&+B[&+CQuitting Game: &+W%s&+B]\n", pname (mynum));
break;
case 2:
send_msg (DEST_ALL, MODE_QUIET, max (pvis (mynum), LVL_WIZARD), LVL_MAX,
mynum, NOBODY,
"&+W[&+CSocket: &+C%s &+whas lost (cut) connection&+W]\n",
pname (mynum));
break;
case 3:
send_msg (DEST_ALL, MODE_QUIET, max (pvis (mynum), LVL_WIZARD), LVL_MAX,
mynum, NOBODY, "&+W[&+CSocket: &+C%s &+whas lost link "
"&+B(&+WConnection Reset by Peer (ECONNRESET)&+B)&+W]\n", pname (mynum));
break;
case 4:
send_msg (DEST_ALL, MODE_QUIET, max (pvis (mynum), LVL_WIZARD), LVL_MAX,
mynum, NOBODY, "&+W[&+CSocket: &+C%s &+whas lost link "
"&+B(&+WNo Route to Host (EHOSTUNREACH)&+B)&+W]\n", pname (mynum));
break;
case 5:
send_msg (DEST_ALL, MODE_QUIET, max (pvis (mynum), LVL_WIZARD), LVL_MAX,
mynum, NOBODY, "&+W[&+CSocket: &+C%s &+whas lost link "
"&+B(&+WConnection Timed Out (ETIMEDOUT)&+B)&+W]\n", pname (mynum));
break;
case 6:
send_msg (DEST_ALL, MODE_QUIET, max (pvis (mynum), LVL_WIZARD), LVL_MAX,
mynum, NOBODY, "&+W[&+CSocket: &+C%s &+whas lost link "
"&+B(&+WNetwork Unreachable (ENETUNREACH)&+B)&+W]\n", pname (mynum));
break;
case 7:
send_msg (DEST_ALL, MODE_QUIET, max (pvis (mynum), LVL_WIZARD), LVL_MAX,
mynum, NOBODY, "&+W[&+CSocket: &+C%s &+whas lost link "
"&+B(&+WNetwork Dropped Connection on Reset (ENETRESET)&+B)&+W]\n", pname (mynum));
break;
case 8:
send_msg (DEST_ALL, MODE_QUIET, max (pvis (mynum), LVL_WIZARD), LVL_MAX,
mynum, NOBODY, "&+W[&+CSocket: &+C%s &+whas lost link "
"&+B(&+WNetwork is Down (ENETDOWN)&+B)&+W]\n", pname (mynum));
break;
case 9:
send_msg (DEST_ALL, MODE_QUIET, max (pvis (mynum), LVL_WIZARD), LVL_MAX,
mynum, NOBODY, "&+W[&+CSocket: &+C%s &+whas lost link "
"&+B(&+WEmpty Packets&+B)&+W]\n", pname (mynum));
break;
default:
bprintf ("What exactly are you trying to do?\n");
return;
}
send_msg (DEST_ALL, MODE_QUIET, max (pvis (mynum), LVL_WIZARD),
LVL_MAX, mynum, NOBODY,
"&+B[&+W%s &*has departed from the MUD in &+C%s &*(&+C%s&*)&+B]\n",
pname (mynum), sdesc (ploc (mynum)), xshowname (b, ploc (mynum)));
setpvis (mynum, maxlev);
bprintf ("You have faked quitting the game.\n");
send_msg (DEST_ALL, MODE_QUIET, max (pvis (mynum), LVL_WIZARD),
LVL_MAX, mynum, NOBODY, "&+B[&+CFakequit &*by &+W%s&+B]\n", pname (mynum));
}
void
siccom (void)
{
int mob, plr;
if (!ptstflg (mynum, PFL_SIC)) {
erreval ();
return;
}
if (EMPTY (item1)) {
bprintf ("Sic what mobile on what player?\n");
return;
}
if ((mob = pl1) == -1) {
bprintf ("That mobile can't be found.\n");
return;
}
if (mob < max_players) {
bprintf ("You can't sic a player on a player!\n");
return;
}
if (EMPTY (item2)) {
bprintf ("Sic %s on what player?\n", pname (mob));
return;
}
if ((plr = pl2) == -1) {
bprintf ("That player can't be found.\n");
return;
}
if (plr >= max_players) {
bprintf ("You can't sic a mobile on a mobile!\n");
return;
}
if (!do_okay (mynum, plr, PFL_NOSIC)) {
bprintf ("You can't sic a mobile on that person.\n");
return;
}
if (ltstflg (ploc (plr), LFL_PEACEFUL)) {
bprintf ("It's too peaceful where %s is to use sic.\n", pname (plr));
return;
}
bprintf ("You sic %s on %s.\n", pname (mob), pname (plr));
send_msg (DEST_ALL, MODE_QUIET, LVL_WIZARD, LVL_MAX, mynum, NOBODY,
"&+B[&+CSic &*by &+W\001p%s\003&*: &+W\001p%s\003 &*on &+W\001p%s\003&+B]\n",
pname (mynum), pname (mob), pname (plr));
setploc (mob, ploc (plr));
sendf (plr, "\001p%s\003 appears and begins to attack you!\n", pname (mob));
setpfighting (mob, plr);
hit_player (mob, plr, -1);
}
void
atviscom (void)
{
static int vislev[] =
{
0, LVL_PROPHET, LVL_PROPHET, LVL_PROPHET,
LVL_PROPHET, LVL_ARCHWIZARD, LVL_ADVISOR,
LVL_AVATAR, LVL_GOD, LVL_MASTER, LVL_MAX
};
int vis, oldvis = pvis (mynum);
int maxvis = vislev[wlevel (plev (mynum))];
char com[MAX_COM_LEN];
if (plev (mynum) < LVL_WIZARD) {
erreval ();
return;
}
if (brkword () == -1) {
bprintf ("What visibility level do you want to use?\n");
return;
}
if ((vis = atoi (wordbuf)) == 0) {
bprintf ("Invalid Visibility Value!\n");
return;
}
getreinput (com);
if (vis > maxvis) {
bprintf ("You can't go invisible to that level! Setting you to %d.\n", maxvis);
vis = maxvis;
}
setpvis (mynum, vis);
gamecom (com, False);
setpvis (mynum, oldvis);
}
void
freaqcom (void)
{
int b;
if (plev (mynum) < LVL_WIZARD) {
erreval ();
return;
}
if (EMPTY (item1)) {
bprintf ("Who is a Frea&+GQ&*?\n");
return;
}
if ((b = pl1) == -1) {
bprintf ("Who is that?\n");
return;
}
if (b >= max_players) {
bprintf ("You can't make a mobile a Frea&+GQ&*!\n");
return;
}
if (wlevel (plev (mynum)) < wlevel (plev (b))) {
bprintf ("You can't make that player a Frea&+GQ&*!\n");
return;
}
if (b == mynum) {
if (ststflg (mynum, SFL_FREAQ)) {
bprintf ("You don't feel like a Frea&+GQ&* anymore.\n");
sclrflg (mynum, SFL_FREAQ);
psetflg (mynum, PFL_TITLES);
} else {
bprintf ("You start to Frea&+GQ&*out!\n");
ssetflg (mynum, SFL_FREAQ);
pclrflg (mynum, PFL_TITLES);
}
return;
}
if (ststflg (b, SFL_FREAQ)) {
bprintf ("You return %s to normal.\n", pname (b));
sendf (b, "You don't feel like a Frea&+GQ&* anymore.\n");
send_msg (DEST_ALL, MODE_QUIET, max (LVL_WIZARD, pvis (b)), LVL_MAX,
mynum, b, "&+B[&+CFreaQ: &+W\001p%s\003 &*has made &+W%s "
"&*normal&+B]\n", pname (mynum), pname (b));
mudlog ("FREAQ: %s made %s normal", pname (mynum), pname (b));
psetflg (b, PFL_TITLES);
sclrflg (b, SFL_FREAQ);
} else {
bprintf ("You turn %s into a FreaQ.\n", pname (b));
sendf (b, "You begin to feel like a Frea&+GQ&*.\n");
send_msg (DEST_ALL, MODE_QUIET, max (LVL_WIZARD, pvis (b)), LVL_MAX,
mynum, b, "&+B[&+CFreaQ: &+W\001p%s\003 &*has made &+W%s "
"&*a FreaQ&+B]\n", pname (mynum), pname (b));
mudlog ("FREAQ: %s made %s a FreaQ", pname (mynum), pname (b));
pclrflg (b, PFL_TITLES);
ssetflg (b, SFL_FREAQ);
}
}