#include "verbs.h"
#include "kernel.h"
#include "stdinc.h"
#include "objects.h"
#include "mobiles.h"
#include "locations.h"
#include "game.h"
void becom (char *passwd)
{
char x[128];
PERSONA p;
if (in_group(mynum))
{
bprintf("You can not use this command while you are in a group.\n");
return;
}
if (passwd == NULL)
{
if (cur_player->polymorphed != -1 || cur_player->aliased)
{
bprintf ("Not when aliased.");
return;
}
if (cur_player->writer != NULL)
{
bprintf ("Finish whatever you're writing first!\n");
return;
}
if (pfighting (mynum) != -1)
{
bprintf ("Not while fighting!\n");
return;
}
if (brkword () == -1)
{
bprintf ("Become what? Inebriated?\n");
return;
}
strcpy (cur_player->work2, wordbuf);
strcpy (cur_player->cprompt, "Password: ");
cur_player->no_echo = True;
/* IAC WILL ECHO */
bprintf ("\n\377\373\001\001Password: ");
push_input_handler (becom);
}
else
{
bprintf ("\377\374\001\001");
cur_player->no_echo = False;
pop_input_handler ();
if (!getuaf (cur_player->work2, &p))
{
bprintf ("No such player.\n");
}
else if (is_player_banned(cur_player->work2)) {
bprintf("Sorry, %s is banned.\n", cur_player->work2);
return;
}
else if (!EQ (p.p_passwd, my_crypt (x, passwd, strlen (p.p_passwd) + 1)))
{
bprintf ("Incorrect password!\n");
}
else if (fpbns (cur_player->work2) >= 0)
{
bprintf ("That player is already on the game.\n");
}
else
{
cur_player->ghostcounter = 0;
sclrflg(mynum, SFL_GHOST);
strcpy (cur_player->setin, cur_player->ghostsetin);
strcpy (cur_player->setout, cur_player->ghostsetout);
/* Again, in newer dyrt versions, need to use setstand and setsit */
/* strcpy (cur_player->sethere, cur_player->ghostsethere); */
strcpy (cur_player->setstand, cur_player->ghostsetstand);
strcpy (cur_player->setsit, cur_player->ghostsetsit);
saveme ();
remove_entry (mob_id (mynum), &id_table);
pers2player (&p, mynum);
strcpy (cur_player->prompt, cur_player->prompt);
mudlog ("%s has BECOME %s", pname (mynum), p.p_name);
send_msg (DEST_ALL, MODE_QUIET, max (LVL_APPREN, pvis (mynum)),
LVL_MAX, mynum, NOBODY,
"[%s has BECOME %s]\n", pname (mynum), p.p_name);
send_msg (ploc (mynum), 0, pvis (mynum), LVL_MAX, mynum, NOBODY,
"%s disintegrates, and reappears as %s.\n",
pname (mynum), p.p_name);
setpname (mynum, p.p_name);
fetchprmpt (mynum);
insert_entry (mob_id (mynum), mynum, &id_table);
bprintf ("You are now %s.\n", pname (mynum));
if (phome(mynum) == LOC_JAIL_JAIL) {
bprintf ("Gee..why didn't I think of that?\n");
bprintf ("You are still jailed :)\n");
setploc (mynum, LOC_JAIL_JAIL);
}
}
get_command (NULL);
}
}
void blowcom (void)
{
int a;
char s[100];
if ((a = ohereandget ()) == -1)
return;
if (onum (a) == OBJ_CAVE_BAGPIPES)
{
broad ("\001dA &+yhideous&* wailing sounds echos all around.\n\003");
return;
}
if (onum (a) == OBJ_OAKTREE_WHISTLE)
{
broad ("\001dA strange ringing fills your head.\n\003");
if (alive (max_players + MOB_OAKTREE_OTTIMO) != -1)
{
bprintf ("A small dachshund bounds into the room "
"and leaps on you playfully.\n");
sprintf (s, "A small dachshund bounds into the room "
"and leaps on %s playfully.\n", pname (mynum));
sillycom (s);
setploc (max_players + MOB_OAKTREE_OTTIMO, ploc (mynum));
}
if (ploc(mynum) == (oloc(OBJ_OAKTREE_TOPFOXHOLE)))
{
bprintf("Ottimo begins to dig, wagging his tail happily.\n");
bprintf("Ottimo has uncovered a foxhole at the bottom of the oak!\n");
setobjstate(OBJ_OAKTREE_TOPFOXHOLE, 0);
}
return;
}
if (onum (a) == OBJ_LABYRINTH_HORN)
{
broad ("\001dA mighty horn blast echoes around you.\n\003");
if (ploc (mynum) >= LOC_SEA_12 && ploc (mynum) <= LOC_SEA_1 &&
oarmor (OBJ_SEA_EXCALIBUR) == 0)
{
setoloc (OBJ_SEA_EXCALIBUR, ploc (mynum), IN_ROOM);
setobjstate (OBJ_SEA_EXCALIBUR, 1);
bprintf ("A hand breaks through the water holding up "
"the sword &+WExcalibur!&*\n");
osetarmor (OBJ_SEA_EXCALIBUR, 1);
questsdone[Q_EXCALIBUR] = True;
if (!qtstflg(mynum, Q_EXCALIBUR))
{
qsetflg (mynum, Q_EXCALIBUR);
send_msg(DEST_ALL, MODE_QUIET|MODE_COLOR, LVL_APPREN, LVL_MAX,
NOBODY, NOBODY, "[%s solved the Excalibur quest]\n",pname(mynum));
bprintf("Congratulations! You have solved the FindExcalibur Quest\n");
}
}
return;
}
bprintf ("You can't blow that.\n");
}
void beepcom (void)
{
int vic;
if (brkword () == -1)
{
bprintf ("Beep who?\n");
return;
}
if (ltstflg(ploc(mynum), LFL_JAIL) && (plev(mynum) < LVL_ARCHWIZARD)) {
bprintf ("I think you should cool off a bit first.\n");
return;
}
if ((vic = pl1) == -1)
{
bprintf ("There is no one with that name.\n");
return;
}
if (vic == mynum)
{
bprintf ("You are funny.\n");
return;
}
/* no beep to BUSY, DEAF, DUMB, or people in SOUNDPROOF rooms */
if (ststflg (vic, SFL_BUSY) || ststflg (vic, SFL_DEAF) ||
ststflg (vic, SFL_DUMB) ||
ltstflg (ploc (vic), LFL_SOUNDPROOF))
{
bprintf ("Your spell fizzles and dies...\n");
return;
}
sendf (vic, "%s is &+Ydesperately&* trying to get your attention.\007\n",
see_player (vic, mynum) ? pname (mynum) : "Someone");
bprintf ("You send %s annoying &+Gbeeps&*.\n", psex (vic) ? "her" : "him");
}
void homecom (void)
{
if (phome (mynum) == 0 || plev (mynum) < LVL_APPREN || !exists (phome (mynum)))
{
bprintf ("You are but without a home, my friend.\n");
return;
}
if (ltstflg(ploc(mynum), LFL_JAIL) && (plev(mynum) < LVL_ARCHWIZARD)) {
bprintf ("Until you are let out, this IS your home.\n");
return;
}
if (ltstflg (phome (mynum), LFL_PRIVATE))
{
if (plev (mynum) < LVL_GOD)
if (count_players (phome (mynum), LVL_MIN, LVL_MAX, COUNT_PLAYERS) > 1)
{
bprintf ("Your home seems to be full at the moment.\n");
return;
}
}
bprintf ("You suddenly feel homesick... and click your heels three times.\n");
teletrap (phome (mynum));
return;
}
void comparecom()
{
if (EMPTY(item1) || EMPTY(item2))
{
bprintf ("You must specify two items to compare.\n");
return;
}
if (!iscarrby(ob1, mynum))
{
bprintf ("You don't have a %s.\n", item1);
return;
}
if (!iscarrby(ob2, mynum))
{
bprintf ("You don't have a %s.\n", item2);
return;
}
if ((oarmor(ob1) < 1 && odamage(ob1) < 1) ||
(oarmor(ob2) < 1 && odamage(ob2) < 1))
{
bprintf("The gods save you points by telling you that either %s or %s is "
"neither\narmor nor weapon.\n", oname(ob1), oname(ob2));
return;
}
if (pscore(mynum) < 2500)
{
bprintf ("You don't have enough score to compare objects.\nYou need"
"2500 to use this command.\n");
return;
}
else
{
setpscore (mynum, pscore (mynum) - 500);
bprintf("You offer your 500 score sacrifice in hopes of answered"
" prayers.\n");
bprintf("After a few moments you hear their reply and jot it down.\n");
bprintf("Your notes look like this...\n\n");
if (oarmor(ob1) != oarmor(ob2)) {
bprintf("Better Armor == ");
if (oarmor(ob1) > oarmor(ob2))
bprintf("&+G%s&*\n", oname(ob1));
else
bprintf("&+G%s&*\n", oname(ob2));
} else
bprintf("&+GBoth same armor value.&*\n");
if (odamage(ob1) != odamage(ob2))
{
bprintf("Better Damage == ");
if (odamage(ob1) > odamage(ob2))
bprintf("&+C%s&*\n", oname(ob1));
else
bprintf("&+C%s&*\n", oname(ob2));
}
else
bprintf("&+CBoth same damage value.&*\n");
}
}
void sitcom (void)
{
if (psitting (mynum))
{
bprintf ("You're already sitting.\n");
return;
}
else if (pfighting (mynum) >= 0)
{
bprintf ("You want to sit down while fighting? Do you have a death "
"wish or something?\n");
return;
}
#ifdef LOCMIN_ICECAVE
if (ploc(mynum) == LOC_ICECAVE_THRONE)
{
if (oloc(OBJ_ICECAVE_WESTICETHRONE))
{
bprintf("The throne collapses under your weight, revealing a passage east.\n");
setobjstate(OBJ_ICECAVE_WESTICETHRONE, 0);
return;
}
}
#endif
#ifdef LOCMIN_JBS
if (ploc(mynum) == LOC_ICECAVE_THRONE)
{
bprintf("When you look into the mugwumps beady eyes,"
" you are enslaved to the interzone.\n");
crapup("You spend eternity sitting here, and eventually die", SAVE_ME);
return;
}
#endif
else
{
bprintf ("You assume the lotus position.\n");
send_msg (ploc (mynum), 0, pvis (mynum), LVL_MAX, mynum, NOBODY,
"%s sits down.\n", pname (mynum));
setpsitting (mynum, 1);
}
}
void standcom (int player)
{
if (!psitting (player))
{
sendf (player, "You're already standing.\n");
return;
}
else
{
sendf (player, "You clamber to your feet.\n");
send_msg (ploc (player), 0, pvis (player), LVL_MAX, player, NOBODY,
"%s clambers to %s feet.\n", pname (player), his_or_her (player));
setpsitting (player, 0);
}
}
void ticklecom (void)
{
int a;
if (ob1==OBJ_FOREST_INSIDETREE)
{
bprintf("You tickle the tree into paroxyms of giggles and manage to escape.\n");
trapch(LOC_FOREST_F4);
/*
mortals cheating with this.
setpscore(mynum, pscore(mynum)+100);
*/
++oarmor(OBJ_FOREST_TREEEATING);
return;
}
if ((a = vichere ()) < 0)
return;
if (a == mynum)
{
bprintf ("You tickle yourself.\n");
return;
}
sillytp (a, "tickles you.");
bprintf ("You tickle %s.\n", him_or_her (a));
}
void diagnosecom(void)
{
static char *t[] =
{
"&+R%s near death.&*\n",
"&+R%s near death.&*\n",
"&+R%s mortally wounded.&*\n",
"&+R%s seriously wounded.&*\n",
"&+R some wounds, but %s still fairly strong.&*\n",
"&+R minor cuts and abrasions.&*\n",
"&+R minor cuts and abrasions.&*\n",
"&+R feels a bit dazed.&*\n",
"&+R%s in better than average condition.&*\n",
"&+R%s in exceptional health.&*\n",
"&+R%s in exceptional health.&*\n"
};
int p, x, plx=pfighting (mynum);
if (pfighting(mynum) < 0)
{
bprintf ("You aren't fighting anyone!\n");
}
else
{
if (plx >= max_players)
{
x = pstr_reset (plx);
}
else
{
x = maxstrength (plx);
}
if (pstr(plx) < 0)
p = -1;
else if (pstr(plx) > x)
p = 11;
else
p = (int) (pstr(plx) * 10 / x);
bprintf("&+R%s&* ", pname(plx));
if (p >= 4 && p <= 6)
bprintf ("&+R%s&*", "&+Rhas");
if (p >= 0 && p <= 10)
bprintf (t[p], "&+Ris");
else
bprintf ("&+Rmust %s&*", p < 0 ? "&+Rbe undead!&*\n" :
"&+Rhave had Wheaties for breakfast!&*\n");
}
}
void digcom(void)
{
if (ststflg(mynum, SFL_GHOST)) {
bprintf("Your ghostly fingers pass right through the ground!\n");
return; }
#ifdef LOCMIN_ICECAVE
if (ploc (mynum) == oloc (OBJ_ICECAVE_HOLE_SNOW_CAVE) ||
ploc (mynum) == oloc (OBJ_ICECAVE_HOLE_G_HALL))
{
if (state (OBJ_ICECAVE_HOLE_G_HALL) == 1)
{
if (iscarrby (ob1, mynum) && otstbit (ob1, OFL_WEAPON))
{
bprintf ("You rapidly dig through to another passage.\n");
setobjstate (OBJ_ICECAVE_HOLE_G_HALL, 0);
return;
}
else
{
bprintf ("The ice and snow are thick, you'll need something "
"to hack through it with.\n");
return;
}
}
else
{
bprintf ("You widen the hole but with little effect.");
return;
}
}
#endif
#ifdef LOCMIN_KASTLE
if (ploc(mynum) == oloc(OBJ_KASTLE_SNOW_ICE))
{
bprintf("You dig a passage up through the snow and ice.\n");
setobjstate(OBJ_KASTLE_SNOW_ICE, 0);
setobjstate(OBJ_BLIZZARD_SNOW_ICE, 0);
return;
}
if (ploc(mynum) == oloc(OBJ_KASTLE_HOLE))
{
bprintf("You dig through the thick snow to form a passage leading down.\n");
setobjstate(OBJ_KASTLE_HOLE, 0);
setobjstate(OBJ_KASTLE_HOLE_1, 0);
return;
}
#endif
#ifdef LOCMIN_LEDGE
if ((ploc (mynum) == oloc (OBJ_LEDGE_TUNNWEST) ||
ploc (mynum) == oloc (OBJ_LEDGE_TUNNEAST)) &&
state (OBJ_LEDGE_TUNNEAST) == 1)
{
bprintf ("You dig your way through the rockfall, and soon clear "
"the passage.\n");
setobjstate (OBJ_LEDGE_TUNNEAST, 0);
return;
}
#endif
#ifdef LOCMIN_ABYSS
if ((ploc (mynum) == oloc (OBJ_ABYSS_BONESSTAIRS) ||
ploc (mynum) == oloc (OBJ_ABYSS_PLAINSTAIRS)) &&
state (OBJ_ABYSS_PLAINSTAIRS) == 1)
{
bprintf ("You dig your way through the rockfall, and soon clear "
"the passage.\n");
setobjstate (OBJ_ABYSS_PLAINSTAIRS, 0);
return;
}
#endif
#ifdef LOCMIN_CHURCH
if (ploc (mynum) == oloc (OBJ_CHURCH_SLAB_TOP) &&
otstbit (OBJ_CHURCH_SLAB_TOP, OFL_DESTROYED))
{
bprintf ("You uncover a stone slab!\n");
oclrbit (OBJ_CHURCH_SLAB_TOP, OFL_DESTROYED);
return;
}
#endif
#ifdef LOCMIN_OAKTREE
if (ploc (mynum) == oloc (OBJ_OAKTREE_TOPFOXHOLE) &&
state (OBJ_OAKTREE_TOPFOXHOLE) == 1)
{
bprintf ("Although there are fox tracks in the grass, you can't "
"find the fox hole.\n");
return;
}
#endif
#ifdef LOCMIN_NIBELUNG
if (((ploc(mynum) == oloc(OBJ_NIBELUNG_AZURITE)) == LOC_NIBELUNG_5)
&& (otstbit(OBJ_NIBELUNG_AZURITE, OFL_DESTROYED)))
{
bprintf("You dig up the azurite\n");
oclrbit(OBJ_NIBELUNG_AZURITE, OFL_DESTROYED);
return;
}
#endif
#ifdef LOCMIN_JBS /* code written by Rendor(ken@esu.edu) Nov 1993 */
if( ploc(mynum) == oloc(OBJ_JBS_FLOP_PASTURE) ) {
if( state(OBJ_JBS_FLOP_PASTURE) == 1 ) {
if( iscarrby(ob1, mynum) && ob1==OBJ_JBS_SHOVEL ) {
bprintf("You shovel the flop out of the way and reveal a tunnel!\n");
setobjstate(OBJ_JBS_FLOP_PASTURE,0);
return;
}
bprintf("Your hands sink deep into the flop and all you manage to do \
is smell bad.\n");
return;
}
else {
bprintf("You make the path a little wider.\n");
return;
}
}
#endif
bprintf ("You find nothing.\n");
return;
}
void playcom (void)
{
#ifdef LOCMIN_FOREST
if (ob1 == OBJ_FOREST_PIPES)
{
bprintf("Much as you try, the pipes only make nasty &=yMsqueak&*ing noises.\n");
return;
}
#endif
#ifdef LOCMIN_CAVE
if (ob1 == OBJ_CAVE_BAGPIPES)
{
broad("There is a hideous &=mRwailing&* noise.\n");
return;
}
#endif
#ifdef LOCMIN_WINDOW
if (ob1 == OBJ_WINDOW_HARP)
{
bprintf("A beautiful harp melody &+Cfloats&* to you on a gentle breeze.\n");
return;
}
#endif
}
void scorecom (void)
{
static char *t[] =
{
"&+C%s near death.&*\n",
"&+C%s near death.&*\n",
"&+C%s mortally wounded.&*\n",
"&+C%s seriously wounded.&*\n",
"&+C some wounds, but %s still fairly strong.&*\n",
"&+C minor cuts and abrasions.&*\n",
"&+C minor cuts and abrasions.&*\n",
"&+C feel a bit dazed.&*\n",
"&+C%s in better than average condition.&*\n",
"&+C%s in exceptional health.&*\n",
"&+C%s in exceptional health.&*\n"
};
int p;
int plx = mynum;
if (plev(plx) >= LVL_APPREN && brkword() != -1 && (plx = fpbn (wordbuf)) < 0)
{
bprintf ("Hmm...%s seems to be hiding...\n", wordbuf);
}
else if (plx >= max_players)
{
if (plx == mynum)
{
bprintf ("Your ");
}
else
{
bprintf ("%s's ", pname (plx));
}
bprintf ("strength is %d.\n", pstr (plx));
}
else
{
p = (int) (pstr (plx) * 10 / maxstrength (plx));
if (p > 10)
p = 10;
if (plx == mynum)
{
bprintf("&+Y[&*%s&+Y]&*\n\n", make_title(ptitle(plx), pname(plx)));
bprintf("&+BStrength:&*\t\t%d/%d\n", pstr(plx), maxstrength(plx));
bprintf("&+BScore:&*\t\t\t%d\n", pscore(plx));
if (plev(plx) < LVL_APPREN)
{
bprintf("&+BLevel:&*\t\t\t%d\n", plev(plx));
bprintf("&+BPoints to next level:&*\t%d\n",
levels[plev(plx)+1] - pscore(plx));
}
bprintf("\n");
if (ststflg(plx, SFL_GHOST)) {
bprintf("You are a ghost!\n"); }
else {
bprintf ("&+CYou &*");
if (p >= 4 && p <= 6)
bprintf ("have");
bprintf (t[p], "are"); }
bprintf("&+CThe value of your possessions is %d.&*\n",
value_class(findclass("all"), plx, True));
}
else
{
bprintf("&+Y[&*%s&*Y]&*\n\n", make_title(ptitle(plx), pname(plx)));
bprintf("&+BStrength:&*\t%d/%d\n", pstr(plx), maxstrength(plx));
bprintf("&+BScore:&*\t\t%d\n", pscore(plx));
if (plev(plx) < LVL_APPREN)
{
bprintf("&+BLevel:&*\t\t%d\n", plev(plx));
bprintf("&+BPoints to next level:&*\t%d\n",
levels[plev(plx)+1] - pscore(plx));
}
bprintf("\n");
if (ststflg(plx, SFL_GHOST)) {
bprintf("%s is a ghost!\n", pname(plx)); }
else {
bprintf ("%s ", pname (plx));
if (p >= 4 && p <= 6)
bprintf ("has ");
bprintf (t[p], "is"); }
bprintf("The value of %s's possessions is %d.\n", pname(plx),
value_class(findclass("all"), plx, True));
}
}
}
void meditatecom(void)
{
#ifdef LOCMIN_ANCIENT
if (ploc (mynum) == LOC_ANCIENT_ANC59)
{
if (oarmor (OBJ_ANCIENT_LBOOK) == 0)
{
bprintf ("You &+bmeditate&*, but nothing seems to happen.\n");
}
else
{
bprintf ("&+RYou are teleported!&*\n\n\n");
trapch (LOC_ANCIENT_ANC35);
}
}
#endif
bprintf ("You &+bmeditate&* quietly in the corner.\n");
}
void ringcom(void)
{
switch(ob1)
{
case OBJ_VILLAGE_BELL:
broad("There is an almighty &+BBONG!&*\n");
break;
default:
bprintf("You can't ring that.\n");
break;
}
}