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/
/******************************************************************************
 ** Project    : pDirt (Aber IV MUD Deamon)
 ** Module     : Pets.c
 ** Author     : Peter Eussen (Marty)
 ** Description: An attempt for a personalised, yet standard Pets system.
 ** Version    : 0.0
 ** Date       : August 1996
 ** 
 ** These are just some functions that can be called from the user special 
 ** event function in Players.c. It currently holds 2 non-completed pets:
 ** a demon and an elf. I guess you will be able to figure out how they work,
 ** it's pretty straightforward.
 *****************************************************************************/
#include "Pets.h"

/******************************************************************************
 ** The demon pet.
 ** Currently the only pet in the system. Commands are:
 ** demon greet <plx>
 ** demon hug <plx>
 ** demon scare <plx>
 *******************************************************************************/
void demon_pet(char *name,int event, Boolean he, int *mob)
{  static char *demon_tab[] =
   {  "greet",		"hug",		"scare",	
      TABLE_END
   };
   
   if (event == E_ONTIMER)
      return;

   switch (event) {
   case E_ONINIT:
        if (plev(param_s.plx) > LVL_DEMI)
            sendf(param_s.plx,"Loading User Code....\n");

        if (randperc() < 75)
        {
            sendf(param_s.plx,"%s comes in and sits on your shoulder.\n",name);
            send_msg(ploc(param_s.plx),MODE_NOBLIND,pvis(param_s.plx),LVL_MAX,param_s.plx,NOBODY,
                 "%s comes in and sits on \001p%s\003's shoulder.\n",
                 name,pname(param_s.plx));
        }
        else
           sendf(param_s.plx,"%s feels a bit cranky today, and decides to stay at the Pet Store.\n",name);

        break;
   case E_USER:
        if (strncasecmp(param_s.buf,"demon",strlen(param_s.buf)) == 0)
        {   int demon_cmd;

            param_s.ret = 0;

            if (brkword() != -1)
            {  demon_cmd = tlookup(wordbuf,demon_tab);

               if (demon_cmd >= 0)
               {  int plx = -1;

                  if (brkword() != -1)
                    plx = fpbns(wordbuf);

                  switch(demon_cmd) {
                  case 0: if (plx < 0 || plx > numchars)
                          {   sendf(param_s.plx,"%s doesn't know them.\n",name);
                          } 
                          else
                          {   sendf(param_s.plx,"%s flies off to greet %s.\n",name,
                                    pname(plx));
                              send_msg(ploc(param_s.plx),MODE_NOBLIND,pvis(param_s.plx),LVL_MAX,param_s.plx,NOBODY,
                                       "%s flies off to greet someone.\n",name);

                              if (ploc(param_s.plx) == ploc(plx))
                              {  send_msg(ploc(plx),MODE_NOBLIND,LVL_MIN,LVL_MAX,plx,NOBODY,
                                       "%s flies towards %s and starts playing with %s hair joyfully.\n",
                                        name,pname(plx),his_or_her(plx));
                                sendf(plx,"%s rushes towards you in a blinding joy, and plays with your hair.\n"
                                          "while playing %s says: &+W'%s is happy to see you'&*\n",
                                           name,he ? "he" : "shes", pname(param_s.plx));
                                send_msg(ploc(param_s.plx),MODE_NOBLIND,pvis(param_s.plx),LVL_MAX,param_s.plx,NOBODY,
                                      "%s flies back to \001p%s\003.\n",name,pname(param_s.plx));
                              }
                              else
                              {   send_msg(ploc(plx),MODE_NOBLIND,LVL_MIN,LVL_MAX,plx,NOBODY,
                                          "%s comes in and plays with \001p%s\003 %s hear, making it a complete mess.\n",
                                          name,pname(plx),his_or_her(plx));
                                  sendf(plx,"%s flies straight towards you in a blinding joy, and plays with your hair.\n"
                                          "while playing %s says: &+W'%s is happy to see you'&*\n",
                                           name,he ? "he" : "she", pname(param_s.plx));
                                  send_msg(ploc(param_s.plx),MODE_NOBLIND,pvis(param_s.plx),LVL_MAX,NOBODY,NOBODY,
                                      "%s comes back from a succesfull mission.\n",name);
                              }
                          }
                          break;
                  case 1: if (plx < 0 || plx > numchars)
                             bprintf("%s doesn't know them.\n",name);
                          else
                          {  if (ploc(plx) == ploc(param_s.plx))
                             {   bprintf("%s hugs %s closely.\n",name,pname(plx));
                                 sendf(plx,"%s hugs you closely.\n",name);
                                 send_msg(ploc(plx),MODE_NOBLIND,Max(pvis(mynum),pvis(plx)), LVL_MAX, plx, mynum,
                                 	  "%s hugs %s closely.\n",name,pname(plx));
                             }
                             else
                             {   bprintf("You send %s out to hug %s.\n",name,pname(plx));
                                 send_msg(ploc(param_s.plx),MODE_NOBLIND,LVL_MIN,LVL_MAX,param_s.plx,NOBODY,
                                          "\001p%s\003 sends %s demon out on a mission.\n",pname(mynum),
                                          his_or_her(param_s.plx));
                                 send_msg(ploc(plx),MODE_NOBLIND,LVL_MIN,LVL_MAX,plx,NOBODY,
                                  	"%s the demon comes in flying towards \001p%s\003.\n",
                                  	name,pname(plx));
                                 sendf(plx,"%s comes flying in and hugs you closely.\n",name);
                                 send_msg(ploc(plx),MODE_NOBLIND,LVL_MIN,LVL_MAX,NOBODY,NOBODY,
                                        "%s flies back to %s owner.\n",name, he ? "his" : "her");
                                 send_msg(ploc(param_s.plx),MODE_NOBLIND,LVL_MIN,LVL_MAX,param_s.plx,NOBODY,
                                        "%s returns from a succesfull mission.\n");
                             }
                          }
                          break;
                  case 2: sendf(param_s.plx,"Demon scare command.\n");
                           break;
                  default: sendf(param_s.plx,"%s looks baffeled.\n",pname(param_s.plx));
                            break;
                  }
                  return;
               }
            }
            sendf(param_s.plx, "%s wonders what you are up to next.\n",name);
            send_msg(ploc(param_s.plx),MODE_NOBLIND,pvis(param_s.plx),LVL_MAX,param_s.plx,NOBODY,
                     "%s wonders what %s is up to next.\n",
                     name,pname(param_s.plx)); 
        }
        break;
   default: break;
   }
}


void elf_pet(char *name,int event, Boolean he, int *mob)
{  static char *elf_cmds[] =
   {	"greet",	"tickle",	"hate",		
	TABLE_END
   };

   switch (event) {
   case E_ONINIT:
	sendf(param_s.plx,"%s comes in and hides in one of your pockets.\n",name);
        send_msg(ploc(param_s.plx),MODE_NOBLIND,pvis(param_s.plx),LVL_MAX,param_s.plx,NOBODY,
               "%s comes flying in and hides in \001p%s\003's pocket.\n",name,
               pname(param_s.plx));
        break;
   case E_USER:
      if (strncasecmp(param_s.buf,name,strlen(param_s.buf)) == 0)
      { if (brkword() != -1)
        {  int verb = tlookup(wordbuf,elf_cmds);
           int plx = -1;

           if (verb > 0)
           {   if (brkword() != -1)
                  plx = fpbns(wordbuf);

               switch(verb) {
               case 0: sendf(param_s.plx,"Greet com\n");break;
               case 1: sendf(param_s.plx,"Tickle com\n");break;
               case 2: 
               	  if (plx < 0 || plx > numchars)
                  {  sendf(param_s.plx,"%s looks everywhere but %s can't find them.\n",
                          name, he ? "he" : "she");
                  }
                  else
                  {   sendf(param_s.plx,"%s is going to teach %s a lesson!\n",name,pname(plx));
                      if (ploc(param_s.plx) != ploc(plx))
                      {   sendf(ploc(param_s.plx),"%s flies away to teach %s a lesson %s won't forget.\n",
                                name, pname(plx),he_or_she(plx) );
                          send_msg(ploc(plx),MODE_NOBLIND,pvis(plx),LVL_MAX,plx,NOBODY,
                                "%s comes flying in and flies towards %s.\n",name,
                                pname(plx));
                          sendf(plx,"%s flies towards YOU!\n",name);
                      } 
                      send_msg(ploc(plx),MODE_NOBLIND,LVL_MIN,LVL_MAX,plx,NOBODY,
                          "%s sells \001p%s\003 a solid blow to the chin.\n",name,
                          pname(plx));
                      sendf(ploc(plx),"%s shouts &+W'TAKE THAT YOU.... YOU MEANY!'&*\n",name);
                      setpstr(plx,pstr(plx) /2);
                      sendf(plx,"%s sells you a solid blow to the chin!\n"
                            "You faint and fall to the ground.\n",name);
                      if (plx < max_players)
                      {   setpsitting(plx,2); 
                          send_msg(ploc(plx),MODE_NOBLIND,LVL_MIN,LVL_MAX,plx,NOBODY,
                             "\001p%s\003 falls to the ground.\n%s says &+W'Whimp!'&*\n",
                             pname(plx),name);
                      }
                  }
                  break;
               default:
                  sendf(param_s.plx,"%s doesn't know what you mean.\n",name);
                  break;
               }
           }
           else
              sendf(param_s.plx,"%s doesn't know what you mean.\n",name);
        }
        else
        {   sendf(param_s.plx,"You take a look at your sweet little elf.\n");
            send_msg(ploc(param_s.plx),MODE_NOBLIND,pvis(param_s.plx),LVL_MAX,param_s.plx,NOBODY,
                "%s takes a look at %s little elf.\n",
                pname(param_s.plx), his_or_her(param_s.plx));
        }
        param_s.ret = 0;
      }
     break;
   default: break;
   }
}