#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include "kernel.h"
#include "locations.h"
#include "sendsys.h"
#include "wizlist.h"
#include "bprintf.h"
#include "actions.h"
#include "mobile.h"
#include "timing.h"
#include "fight.h"
#include "rooms.h"
#include "verbs.h"
#include "parse.h"
#include "log.h"
#include "god.h"
#include "uaf.h"
#include "mud.h"
extern void flush_mud(Boolean);
void deletecom () {
if (plev (mynum) < LVL_SHALAFI) {
erreval ();
return;
}
if (brkword () == -1 || strlen (wordbuf) > PNAME_LEN) {
bprintf ("Delete who?\n");
return;
}
mudlog ("DELETE: %s deleted %s", pname (mynum), wordbuf);
send_msg (DEST_ALL, MODE_SFLAG | MS (SFL_SEEEXT), LVL_SHALAFI, LVL_MAX, mynum,
NOBODY, "&+B[&+W\001p%s\003 &*has &+Cdeleted &+W%s&+B]\n",
pname (mynum), wordbuf);
deluaf (wordbuf);
update_wizlist (wordbuf, LEV_MORTAL);
bprintf ("Deleted %s.\n", wordbuf);
}
/* check is to see if a use has the crash ability */
void crashcom (Boolean check) {
char s[MAX_COM_LEN];
char pidfile[50];
int i;
if (check) {
if (!ptstflg (mynum, PFL_CRASH)) {
erreval ();
return;
}
getreinput (s);
}
mudlog ("&+WSYSTEM:&N Crash by %s", pname(mynum));
for (i = 0; i < max_players; i++)
if (is_in_game (i)) {
setup_globals(i);
if (plev(i) > LVL_GOD && check) {
if (EMPTY(s))
bprintf ("MUD is now crashing.\n");
else
bprintf("%s\n", s);
}
else if (check)
bprintf("\001f%s\003", CRASHED);
quit_player(False);
}
sprintf (pidfile, "%s/%s.%d", data_dir, PID_FILE, mud_port);
remove (pidfile);
flush_mud(True);
}
void bresetcom (void) {
if (!ptstflg (mynum, PFL_REBOOT)) {
erreval ();
return;
}
if (breset) {
bprintf ("Cancelling reboot for next full reset.\n");
mudlog ("BRESET: BootReset turned off by %s", pname (mynum));
breset = False;
} else {
bprintf ("The MUD will now reboot during the next full reset.\n");
mudlog ("BRESET: BootReset turned on by %s", pname (mynum));
breset = True;
}
}
void idlecom (void)
{
if (plev (mynum) < LVL_SHALAFI) {
bprintf ("Pardon?\n");
return;
}
if (ptstflg (mynum, PFL_IDLE)) {
bprintf ("You will no longer pretend to be idle.\n");
pclrflg (mynum, PFL_IDLE);
return;
} else {
bprintf ("You are now pretending to be idle.\n");
psetflg (mynum, PFL_IDLE);
return;
}
}
void
seeidlecom (void)
{
if (plev (mynum) < LVL_GOD) {
bprintf ("Pardon?\n");
return;
}
if (ptstflg (mynum, PFL_SEEIDLE)) {
bprintf ("You will no longer see real idle times.\n");
pclrflg (mynum, PFL_SEEIDLE);
return;
} else {
bprintf ("You will now see real idle times.\n");
psetflg (mynum, PFL_SEEIDLE);
return;
}
}
void
toggleseesocket (void)
{
if (!ptstflg (mynum, PFL_SOCKET)) {
bprintf ("Pardon?\n");
return;
}
if (!ptstflg (mynum, PFL_SEESOCKET)) {
psetflg (mynum, PFL_SEESOCKET);
bprintf ("You can now see socket messages.\n");
} else {
pclrflg (mynum, PFL_SEESOCKET);
bprintf ("You will no longer see socket messages.\n");
}
}
void
togglecoding (void)
{
if (plev (mynum) < LVL_GOD) {
erreval ();
return;
}
if (!ststflg (mynum, SFL_CODING)) {
ssetflg (mynum, SFL_CODING);
bprintf ("You are marked as coding.\n");
send_msg (DEST_ALL, 0, pvis (mynum), LVL_MAX, mynum, NOBODY,
"&+G[&+W%s &*is going away to code&+G]\n", pname (mynum));
} else {
sclrflg (mynum, SFL_CODING);
bprintf ("You are no longer marked as coding.\n");
send_msg (DEST_ALL, 0, pvis (mynum), LVL_MAX, mynum, NOBODY,
"&+G[&+W%s &*is back from coding&+G]\n", pname (mynum));
}
}
void
wloadcom ()
{
char work[100];
char ps1[100];
char ps2[300];
FILE *fp;
char command[50];
if (plev (mynum) < LVL_GOD) {
erreval ();
return;
}
sprintf (command, "ps -ux | grep 'aberd' | grep '%d'", getpid ());
if ((fp = popen ("uptime; ps -ux", "r")) == NULL) {
bprintf ("Error getting system work load statistics.\n");
return;
}
fgets (work, sizeof (work), fp);
fgets (ps1, sizeof (ps1), fp);
pclose (fp);
if ((fp = popen (command, "r")) == NULL) {
bprintf ("Error getting system work load statistics.\n");
return;
}
fgets (ps2, sizeof (ps2), fp);
pclose (fp);
bprintf ("System statistics for %s:\n", MUD_NAME);
bprintf ("%s\n", work);
bprintf ("CDirt Daemon Statistics\n");
bprintf ("-----------------------\n");
bprintf ("%s", ps1);
bprintf ("%-79.79s\n", ps2);
}
void
silentcom (void)
{
if (plev (mynum) < LVL_GOD) {
erreval ();
return;
}
if (ststflg (mynum, SFL_SILENT)) {
bprintf ("Disabling Silent Entry\n");
sclrflg (mynum, SFL_SILENT);
} else {
bprintf ("Enabling Silent Entry\n");
ssetflg (mynum, SFL_SILENT);
}
}
void
ploccom (void)
{
int x, loc;
int me = real_mynum;
if (plev (mynum) < LVL_GOD) {
bprintf ("Pardon?\n");
return;
}
if (EMPTY (item1)) {
bprintf ("Who do you want to relocate?\n");
return;
}
if (EMPTY (item2)) {
bprintf ("Where do you want to relocate them to?\n");
return;
}
if ((x = pl1) == -1) {
bprintf ("That person can't be found.\n");
return;
}
if ((loc = findroomnum (item2)) == 0) {
bprintf ("Location does not exist!\n");
return;
}
bprintf ("You relocate %s to %s (%s).\n",
pname (x), sdesc (loc), showname(loc));
send_msg (DEST_ALL, 0, LVL_GOD, LVL_MAX, mynum, x,
"&+B[&+W\001p%s\003 &*has located &+W\001p%s\003 &*to %s (%s)&+B]\n",
pname (mynum), pname (x), sdesc (loc), showname(loc));
if (x < max_players) {
setup_globals (x);
setploc (mynum, loc);
setup_globals (me);
} else
setploc (x, loc);
}
void
probationcom (void)
{
int b;
if (!ptstflg (mynum, PFL_PROBATION)) {
erreval ();
return;
}
if (EMPTY (item1)) {
bprintf ("Put whom on probation?\n");
return;
}
if ((b = pl1) == -1) {
bprintf ("Who is that?\n");
return;
}
if (b >= max_players) {
bprintf ("I'm afraid that you can't place a mobile on probation.\n");
return;
}
if (!do_okay (mynum, b, PFL_NOPROBATION)) {
bprintf ("You cannot place that player under probation.\n");
return;
}
if (!ststflg (b, SFL_ONPROBATION)) {
mudlog ("PROBATION: %s placed %s ON probation", pname (mynum), pname
(b));
bprintf ("Placing %s on probation.\n", pname (b));
send_msg (DEST_ALL, MODE_QUIET, LVL_WIZARD, LVL_MAX, mynum, b,
"&+B[&+WProbation (On): &+C\001p%s\003 &*by &+C\001p%s\003"
"&+B]\n", pname (b), pname (mynum));
ssetflg (b, SFL_ONPROBATION);
if (plev (b) < LVL_WIZARD)
return;
pclrflg (b, PFL_EXOR);
pclrflg (b, PFL_ZAP);
pclrflg (b, PFL_MFLAGEDIT);
pclrflg (b, PFL_OBJECT);
pclrflg (b, PFL_HEAL);
pclrflg (b, PFL_ALIAS);
pclrflg (b, PFL_ROOM);
pclrflg (b, PFL_CLONE);
pclrflg (b, PFL_PUNT);
pclrflg (b, PFL_TIMEOUT);
pclrflg (b, PFL_LD_STORE);
pclrflg (b, PFL_BURN);
pclrflg (b, PFL_SIC);
if (wlevel (b) < LEV_ISTARI)
return;
pclrflg (b, PFL_RAW);
pclrflg (b, PFL_CH_SCORE);
pclrflg (b, PFL_CH_LEVEL);
} else {
mudlog ("PROBATION: %s placed %s OFF probation", pname (mynum), pname
(b));
bprintf ("Taking %s off probation.\n", pname (b));
send_msg (DEST_ALL, MODE_QUIET, LVL_WIZARD, LVL_MAX, mynum, b,
"&+B[&+WProbation (Off): &+C\001p%s\003 &*by &+C\001p%s\003"
"&+B]\n", pname (b), pname (mynum));
sclrflg (b, SFL_ONPROBATION);
if (plev (b) < LVL_WIZARD)
return;
psetflg (b, PFL_EXOR);
psetflg (b, PFL_ZAP);
psetflg (b, PFL_MFLAGEDIT);
psetflg (b, PFL_OBJECT);
psetflg (b, PFL_HEAL);
psetflg (b, PFL_ALIAS);
psetflg (b, PFL_ROOM);
psetflg (b, PFL_CLONE);
psetflg (b, PFL_PUNT);
psetflg (b, PFL_TIMEOUT);
psetflg (b, PFL_LD_STORE);
psetflg (b, PFL_BURN);
psetflg (b, PFL_SIC);
if (wlevel (b) < LEV_ISTARI)
return;
psetflg (b, PFL_RAW);
psetflg (b, PFL_CH_SCORE);
psetflg (b, PFL_CH_LEVEL);
}
}
void forgetlist (void) {
int b, i;
if (plev (mynum) < LVL_GOD) {
erreval ();
return;
}
if (brkword () == -1) {
bprintf ("Who?\n");
return;
}
if ((b = fpbn(wordbuf)) != -1) {
bprintf ("%s is currently forgetting:\n", pname (b));
for (i = 0; i < 10; ++i) {
if (rplrs[b].forget[i] != -1) {
if (!is_in_game (rplrs[b].forget[i]))
rplrs[b].forget[i] = -1;
else
bprintf ("%s\n", pname (rplrs[b].forget[i]));
}
}
return;
}
bprintf ("That player is not online.\n");
}
void
noruncom (void)
{
int i, me = real_mynum;
if (plev (mynum) < LVL_GOD) {
erreval ();
return;
}
if (norun) {
norun = False;
send_msg (DEST_ALL, 0, LVL_MIN, LVL_MAX, NOBODY, NOBODY,
"&+B[&+WRunning Is Allowed Again&+B]\n");
mudlog ("NORUN: Turned Off by %s", pname (mynum));
} else {
norun = True;
send_msg (DEST_ALL, 0, LVL_MIN, LVL_MAX, NOBODY, NOBODY,
"&+B[&+WRunning Is Being Disabled&+B]\n");
mudlog ("NORUN: Turned On by %s", pname (mynum));
}
for (i = 0; i < max_players; i++) {
if (is_in_game (i) && plev (i) < LVL_WIZARD) {
setploc (i, norun ? LOC_LIMBO_NORUN : randperc () < 50 ?
LOC_START_TEMPLE : LOC_START_CHURCH);
setup_globals (i);
trapch (ploc (mynum));
}
}
setup_globals (me);
}