pdirt/data/
pdirt/data/HELP/
pdirt/data/HELP/0/
pdirt/data/HELP/F/
pdirt/data/HELP/G/
pdirt/data/HELP/H/
pdirt/data/HELP/J/
pdirt/data/HELP/K/
pdirt/data/HELP/O/
pdirt/data/HELP/Q/
pdirt/data/HELP/R/
pdirt/data/HELP/U/
pdirt/data/HELP/V/
pdirt/data/HELP/Y/
pdirt/data/HELP/Z/
pdirt/data/MESSAGES/
pdirt/data/POWERINFO/
pdirt/data/WIZ_ZONES/
pdirt/drv/
pdirt/drv/bin/
pdirt/drv/compiler/converter/
pdirt/drv/compiler/libs/
pdirt/drv/compiler/scripts/
pdirt/drv/include/AberChat/
pdirt/drv/include/InterMud/
pdirt/drv/include/machine/
pdirt/drv/src/InterMud/
pdirt/drv/src/Players/
pdirt/drv/utils/UAFPort/
pdirt/drv/utils/dnsresolv/
pdirt/drv/utils/gdbm/
#define SFLAG_C

#include "kernel.h"
#include <stdlib.h>
#include "sflag.h"
#include "sflags.h"
#include "lflags.h"
#include "sendsys.h"
#include "pflags.h"
#include "mobile.h"
#include "bprintf.h"
#include "log.h"
#include "parse.h"
#include "special.h"
#include "verbs.h"

int jail_check(int plx, int level)
{  return (ltstflg(ploc(plx),LFL_JAIL) && (plev(mynum) < level));
}

void sflagmessage(char *str,Boolean fal)
{   bprintf("&+w[&+w%s &+w= &+w%s&+w]&*\n",str,((fal) ? "On" : "Off"));
}

Boolean can_cast_sleep(int plr)
{   if (psitting(plr) == 2 && plev(plr) < LVL_ARCHWIZARD)
    {   bprintf("You can't cast that spell while sleeping.\n");
        return False;
    }
    else if (psitting(plr) == 3 && plev(plr) < LVL_ARCHWIZARD)
    {   bprintf("You can't cast that spell while in trance.\n");  
        return False;
    }
    return True;
}

A_COMMAND(deafcom)
{
  int a;

  if (!can_cast_sleep(mynum))
     return;

  if (jail_check(mynum,LVL_ARCHWIZARD))
  {  bprintf("You can't cast spells from here.\n");
     return;
  }  
  else if (pdrunk(mynum) > 7 && plev(mynum) < LVL_APPREN)
  {  bprintf("In your drunken state you mix up the words of the spell and it reflects!\n");
     ssetflg(mynum,SFL_DEAF);
     return;
  }
  if ((a = vicf2 (SPELL_REFLECTS, 4)) != -1)
    {
      if (do_okay (mynum, a, PFL_NOMAGIC))
        {
          sendf (a, "&+wYou have been magically deafened!&+w\n");
          ssetflg (a, SFL_DEAF);
          mudlog("%s DEAFENed %s.", pname(mynum), pname(a));
        }
      else
	{
	  bprintf("&+wYou can't just deafen %s at will, you know!&*\n", pname(a));
	  sendf (a, "&+w%s tried to deafen you!&*\n", see_name (a, mynum));
	}
    }
}

A_COMMAND(blindcom)
{
  int a;
  
  if (!can_cast_sleep(mynum))
     return;

  if (jail_check(mynum,LVL_ARCHWIZARD) )
  {  bprintf("You can't cast spells from here.\n");
     return;
  }
  else if (pdrunk(mynum) > 7 && plev(mynum) < LVL_APPREN)
  {   bprintf("With your double vision you cast the spell on yourself!\n");
      ssetflg(mynum,SFL_BLIND);
      return;
  }
  if ((a = vicf2 (SPELL_REFLECTS, 4)) != -1)
    {
      if (do_okay (mynum, a, PFL_NOMAGIC))
        {
          sendf (a, "&+wYou have been struck magically blind!&*\n");
          ssetflg (a, SFL_BLIND);
          mudlog("%s BLINDed %s.", pname(mynum), pname(a));
        }
      else
        {
          bprintf("&+wYou can't just blind %s at will, you know!&*\n", pname(a));
          sendf (a, "&+w%s tried to blind you!&*\n", see_name (a, mynum));
        }
    }
}

A_COMMAND(curecom)
{
  int a;

  if (!can_cast_sleep(mynum))
     return;

  if (jail_check(mynum,LVL_ARCHWIZARD) )
  {  bprintf("You can't cast spells from here.\n");
     return;
  }  
  if (EMPTY (item1))
    {
      bprintf ("Cure who?\n");
      return;
    }
  if ((a = vicf2 (SPELL_PEACEFUL, 8)) >= 0)
    {
      if (a >= 0 && a <= numchars)
      { sclrflg (a, SFL_DUMB);
        sclrflg (a, SFL_CRIPPLED);
        sclrflg (a, SFL_BLIND);
        sclrflg (a, SFL_DEAF);
        sclrflg (a, SFL_DRUNK);
	if (a < max_players)
           pdrunk(a) = 0;

        if (a != mynum)
           sendf (a, "&+wAll of your ailments have been cured by %s.&*\n", pname(mynum));

      if (mob_fun(a) != NULL)
      {  param_s.plx = mynum;
         param_s.pl = a;
         param_s.ret = 1;
         param_s.loc = ploc(mynum);
         param_s.misc = VERB_CURE;
         mob_fun(a)(E_ONMISC);
         if (param_s.ret != 1)
             return;
      }
      if (a < max_players)
        mudlog("%s CUREd %s.", pname(mynum), pname(a));
      }
    }
}

A_COMMAND(dumbcom)
{
  int a;
  
  if (!can_cast_sleep(mynum))
     return;

  if (jail_check(mynum,LVL_ARCHWIZARD) )
  {  bprintf("You can't cast spells from here.\n");
     return;
  }  
  if ((a = vicf2 (SPELL_REFLECTS, 4)) >= 0)
    {
      if (do_okay (mynum, a, PFL_NOMAGIC))
        {
          sendf (a, "&+wYou have been struck magically dumb!&*\n");
          ssetflg (a, SFL_DUMB);
          mudlog("%s has MUTEd %s.", pname(mynum), pname(a));
        }
      else
	{
	  sendf (a, "&+w%s tried to mute you!&*\n", see_name (a, mynum));
	  bprintf("&+wYou can't just mute %s at will, you know!&*\n", pname(a));
	}
    }
}

A_COMMAND(cripplecom)
{
  int a;

  if (!can_cast_sleep(mynum))
     return;

  if (jail_check(mynum,LVL_ARCHWIZARD) )
  {  bprintf("You can't cast spells from here.\n");
     return;
  } 
  if ((a = vicf2 (SPELL_REFLECTS, 4)) >= 0)
    {
      if (do_okay (mynum, a, PFL_NOMAGIC))
        {
          sendf (a, "&+wYou have been magically crippled!&*\n");
          ssetflg (a, SFL_CRIPPLED);
          mudlog("%s has CRIPPLEd %s.", pname(mynum), pname(a));
        }
      else
	{
	  sendf (a, "&+w%s tried to cripple you!&*\n", see_name (a, mynum));
	  bprintf("&+wYou can't just cripple %s at will, you know!&*\n", pname(a));
	}
    }
}

void setsflag(int flag,char *str)
{  int r;
   if ((r=ststflg(mynum, flag)))
      sclrflg(mynum,flag);
   else 
      ssetflg(mynum, flag);
   sflagmessage(str,!r);
}

A_COMMAND(aloofcom)
{ setsflag(SFL_ALOOF,"Ignore Mortal actions");
}

A_COMMAND(noslaincom)
{ setsflag(SFL_NOSLAIN,"Ignore Slain messages");
}

A_COMMAND(quietcom)
{ setsflag(SFL_QUIET,"Quiet mode");
}

A_COMMAND(oldlogincom)
{ setsflag(SFL_OLDLOGIN,"Old Style Login");
}

A_COMMAND(nobeepcom)
{  setsflag(SFL_NOBEEP,"No Beeps");
}

A_COMMAND(nobattlecom)
{  setsflag(SFL_NOBATTLE,"No Battles");
}

A_COMMAND(nopuffcom)
{  setsflag(SFL_NOPUFF,"No Puff messages");
}

A_COMMAND(autoeatcom)
{  setsflag(SFL_AUTOEAT,"Auto eat before flee");
}

A_COMMAND(colorcom)
{  setsflag(SFL_COLOR,"Color Mode");
}

A_COMMAND(noblinkcom)
{  setsflag(SFL_NOBLINK,"No Blinking Text");
}

A_COMMAND(busycom)
{  setsflag(SFL_BUSY,"Busy");
}

A_COMMAND(compactcom)
{  setsflag(SFL_COMPACT,"Compact Mode");
}

A_COMMAND(noinvencom)
{  setsflag(SFL_NOINVEN,"No Inventories");
}

A_COMMAND(autoexitcom)
{  setsflag(SFL_AUTOEXIT,"Auto exits");
}

A_COMMAND(saybackcom)
{  setsflag(SFL_SAYBACK,"Say back messages");
}

A_COMMAND(briefcom)
{  setsflag(SFL_BRIEF,"Brief Mode");
}

A_COMMAND(shortexitcom)
{  setsflag(SFL_SHORTEXIT,"Short Exits");
}

A_COMMAND(noweathercom)
{  setsflag(SFL_NOWEATHER,"No Weather Messages");
}

A_COMMAND(nofingercom)
{  setsflag(SFL_NOFINGER,"Private Email");
}

A_COMMAND(awaycom)
{
  if (ststflg(mynum, SFL_AWAY))
    {
      send_msg(DEST_ALL,MODE_BRACKET|MODE_QUIET,Max(LVL_APPREN,pvis(mynum)),LVL_MAX,mynum,
	       NOBODY, "\001p%s\003 has returned to the keyboard",pname(mynum));
      sclrflg(mynum, SFL_AWAY);
      bprintf("&+w[&+wAway &+w= &+wOff&+w]&*\n");
    }
  else
    {
      getreinput(globalbuf);
      if (EMPTY(globalbuf))
          strncpy(cur_player->awaymsg,"no particular reason.",SETIN_MAX);
      else
          strncpy(cur_player->awaymsg,globalbuf,SETIN_MAX);
      ssetflg(mynum, SFL_AWAY);
      bprintf("&+w[&+wAway &+w= &+wOn &+w: &+w%s&+w]&*\n",cur_player->awaymsg);
      send_msg(DEST_ALL, MODE_BRACKET|MODE_QUIET, Max(LVL_APPREN,pvis(mynum)), LVL_MAX,
	       mynum, NOBODY, "\001p%s\003 has left the keyboard. Reason: %s",pname(mynum),cur_player->awaymsg);
    }
}


A_COMMAND(codecom)
{
  if (!ptstflg(mynum, PFL_MAYCODE))
  {
      bprintf ("&+wSorry&*, but you are not allowed to code.\n");
      return;
  }
  if (!ststflg (mynum, SFL_CODING))
      ssetflg (mynum, SFL_CODING);
  else
      sclrflg (mynum, SFL_CODING);
  sflagmessage("Coding",ststflg(mynum,SFL_CODING)); 
}

PUBLIC A_COMMAND(nocommcom)
{   int x;

    if (pl1 == -1 || pl1 == mynum)
    {   setsflag(SFL_NOCOMM,"NoComm");
        x = mynum;
    }
    else if (pl1 < 0 || pl1 > max_players)
    {   bprintf("Invalid player or player not found.\n");
        return;
    }
    else if (ststflg(pl1,SFL_NOCOMM))
    {   bprintf("%s can now use the channels again.\n",pname(pl1));
        sendf(pl1,"You may now use the public channels again.\n");
        sclrflg(pl1,SFL_NOCOMM);
        x= pl1;
    }
    else
    {   bprintf("%s can't use the public channels from now on.\n",pname(pl1));
        sendf(pl1,"You have been banned from all public channels.\n");
        ssetflg(pl1,SFL_NOCOMM);
        x = pl1;
    }

    if (ststflg(x,SFL_NOCOMM))
    {  ssetflg(x,SFL_NO_GOD);
       ssetflg(x,SFL_NO_DGOD);
       ssetflg(x,SFL_NO_AWIZ);
       ssetflg(x,SFL_NO_WIZ);
       ssetflg(x,SFL_NO_GOSSIP);
       ssetflg(x,SFL_NO_CHAT);
       ssetflg(x,SFL_NOSHOUT);
       ssetflg(x,SFL_I_NOGOSSIP);
    }
    else
    {  sclrflg(x,SFL_NO_GOD);
       sclrflg(x,SFL_NO_DGOD);
       sclrflg(x,SFL_NO_AWIZ);
       sclrflg(x,SFL_NO_WIZ);
       sclrflg(x,SFL_NO_GOSSIP);
       sclrflg(x,SFL_NO_CHAT);
       sclrflg(x,SFL_NOSHOUT);
       sclrflg(x,SFL_I_NOGOSSIP);
    } 

}

/****************************************************************************
 ** NOSHOUT
 ** parameter:
 ** none       : stops player from hearing shouts
 ** player name: If wiz, sets/unsets wiz priviledge from someone
 ****************************************************************************/
PUBLIC A_COMMAND(noshoutcom)
{ int x;
  
  if (plev (mynum) < LVL_APPREN)
  {
      erreval ();
      return;
  }
  if ((x = pl1) == -1 || x == mynum)
    {
      if (ststflg (mynum, SFL_NOSHOUT))
        {
          bprintf ("You can hear &+wshouts&* again.\n");
          sclrflg (mynum, SFL_NOSHOUT);
        }
      else
        {
          bprintf ("From now on you won't hear &+wshouts.&*\n");
          ssetflg (mynum, SFL_NOSHOUT);
        }
    }
  else if (plev (x) >= LVL_APPREN)
    {
      if (ststflg (x, SFL_NOSHOUT))
        {
          bprintf ("%s can hear &+wshouts&* again.\n", pname (x));
          sclrflg (x, SFL_NOSHOUT);
        }
      else
        {
          bprintf ("From now on %s won't hear &+wshouts.&*\n", pname (x));
          ssetflg (x, SFL_NOSHOUT);
        }
    }
  else if (ststflg (x, SFL_NOSHOUT))
    {
      bprintf ("%s is allowed to &+wshout&* again.\n", pname (x));
      sclrflg (x, SFL_NOSHOUT);
    }
  else
    {
      bprintf ("From now on %s cannot &+wshout.&*\n", pname (x));
      ssetflg (x, SFL_NOSHOUT);
    }
}