/* This is a sample spec_proc for mobs */
int sample_proc1(struct char_data *ch,struct char_data *pl,char *arg,int cmd)
/* ch  = the mob whose proc this is
   pl  = the person whose command is being processed (NULL for mob "ticks")
   arg = argument to the command
   cmd = command number (see commands.doc for a listing) */

{
   struct char_data *victim;
   
/* if(cmd==-1) {  ** only for ACT_SPEC_DIE mobs **
       ** handle death stuff **
   } else... */
   if(pl) {    /* We were called because a command was given */
      
      /* If the mob is not in "position" to react, then don't allow it */
      if(GET_POS(ch)<=POSITION_SLEEPING || GET_POS(ch)==POSITION_FIGHTING)
         return FALSE;
         
      switch(cmd) {
         case **smile**:   /* Command numbers to catch */
            do_say(ch,"No smiling!",0);
            break;
         case **poke**:
            /* Who is the player doing something to? */
            /* (as in "poke <x> or kill <y> - as only argument) */
            victim=get_char_vis(pl,argument); /* need to double-check this..*/
            
            if(victim==ch) { /* Is it me? */
               
               /* do something */
               act("$N squirms away from your poke.",FALSE,pl,0,ch,TO_CHAR);
               act("$N squirms away from $n's poke.",TRUE,pl,0,ch,TO_ROOM);
               
               return TRUE; /* Since we took care of the command. */
            }
            break;
         default:
            break;
      }
   } else { /* Called on the mob tick */
      switch(number(0,10)) { /* Do something randomly */
         case 0:
            do_action(ch,"",**burp**); /* Make 'em burp */
            break;
         default:
            break;
      }
   }
   return(FALSE);
}

/* obj proc, for a cake that must be sliced to be eaten */
int sample_proc2(struct obj_data *obj,struct char_data *ch,char *arg,int cmd)
{
   struct obj_data *target;
   char name[MAX_INPUT_LENGTH];
   
   if(ch) {
      if(!CAN_SEE_OBJ(ch,obj))
         return(FALSE);
         
      one_argument(arg,name); /*???*/
      target=get_obj_vis(ch,name);
      
      if(target!=obj)
         return(FALSE);
         
      switch(cmd) {
         case **eat**:
            act("$n tries to fit $p in $s mouth, but fails!",TRUE,ch,obj,0,TO_ROOM);
            act("You can't fit it in your mouth!",FALSE,ch,0,0,TO_CHAR);
            return(TRUE);
            break;
         case **slice**:
            for(i=0;i<5;i++) {
               temp=read_object(*piece of cake*,VIRTUAL);
               if(in room)
                  obj_to_room(temp,ch->in_room);
               else
                  obj_to_inv(temp,ch??);
            }
            extract_obj(obj); /* Get rid of the original unsliced cake */
            break;
         default:
            break;
      }
   } else {
      if(..in inventory..&& hungry...&& !number(0,6)) {
         act("$p calls out to your famished stomach, 'Eat me! Eat me!'",
               FALSE,...,obj,0,TO_CHAR);
      }
   }
   return(FALSE);
}

/* A room proc, which teleports people to a cell at random */
int sample_proc3(int room,struct char_data *ch,char *arg,int cmd)
{
   struct char_data *k;
   
   if(!ch) {
      for(k=world[room].people;k;k=k->next_in_room) {
         if(!number(0,5)) {
            act("There is a whirring of a machine close by.",FALSE,k,0,0,TO_ROOM);
            act("You hear a whir of a machine, and a slight tug in your soul.",
               FALSE,k,0,0,TO_CHAR);
            teleport_to(k,real_room(**cell number**));
            return(TRUE);
         }
      }
   }
   return(FALSE);
}