gurba-0.40/
gurba-0.40/bin/
gurba-0.40/lib/
gurba-0.40/lib/cmds/guild/fighter/
gurba-0.40/lib/cmds/monster/
gurba-0.40/lib/cmds/race/catfolk/
gurba-0.40/lib/cmds/race/dwarf/
gurba-0.40/lib/cmds/verb/
gurba-0.40/lib/daemons/data/
gurba-0.40/lib/data/boards/
gurba-0.40/lib/data/messages/
gurba-0.40/lib/data/players/
gurba-0.40/lib/design/
gurba-0.40/lib/domains/gurba/
gurba-0.40/lib/domains/gurba/guilds/fighter/
gurba-0.40/lib/domains/gurba/monsters/
gurba-0.40/lib/domains/gurba/objects/armor/
gurba-0.40/lib/domains/gurba/objects/clothing/
gurba-0.40/lib/domains/gurba/objects/weapons/
gurba-0.40/lib/domains/gurba/vendors/
gurba-0.40/lib/kernel/cmds/admin/
gurba-0.40/lib/kernel/daemons/
gurba-0.40/lib/kernel/include/
gurba-0.40/lib/kernel/lib/
gurba-0.40/lib/kernel/net/
gurba-0.40/lib/kernel/sys/
gurba-0.40/lib/logs/
gurba-0.40/lib/pub/
gurba-0.40/lib/std/modules/languages/
gurba-0.40/lib/std/races/
gurba-0.40/lib/std/races/monsters/
gurba-0.40/lib/wiz/fudge/
gurba-0.40/lib/wiz/spud/
gurba-0.40/src/host/beos/
gurba-0.40/src/host/pc/res/
gurba-0.40/src/kfun/
gurba-0.40/src/lpc/
gurba-0.40/src/parser/
gurba-0.40/tmp/
inherit MONSTER;
inherit M_ACTIONS;

int nFollow;
string master_name;
object master;
string my_name;

void set_master( object m ) {
   if( m != 0 ) {
      master = m;
      master_name = m->query_proper_name();
   }
}

void
setup( void ) {
  set_name( master_name + "s page" );
  my_name = master_name + "'s page";
  set_proper_name( capitalize(master_name) + "'s page" );
  set_gender( 1 );
  set_adj( "slave" );
  set_in_room_desc( capitalize(master_name) + "'s page." );
  set_long( "The page is wearing a simple robe, and his head is always bent in humbleness." );
  set_race( "human" );
  nFollow = call_out( "follow_master", 2 );
  respond("bow " + master_name );
}

void 
follow_master( void ) {
  object *objs;
  int i;
  int nMasterHere;


  nMasterHere = 0;
  objs = query_environment()->query_inventory();
  for( i = 0; i < sizeof( objs ); i++ ) {
    if( objs[i] == master ) {
      nMasterHere = 1;
    }
  }

  if( nMasterHere == 0 ) {
    if( master == 0 ) {
      /* Fudge has left the building */
      remove_call_out( nFollow );
      respond( "say It seems " + master_name + " no longer has a need for me." );
      die();
      destruct_object( this_object() );
      return;
    }
    if( query_environment() != master->query_environment() ) {
      switch( random( 10 ) ) {
      case 0: query_environment()->tell_room( 0, my_name + " leaves."); break;
      case 1: query_environment()->tell_room( 0, my_name + " tries to follow his master."); break;
      case 2: query_environment()->tell_room( 0, my_name + " follows his master."); break;
      case 3: query_environment()->tell_room( 0, my_name + " disappears in a cloud of smoke."); break;
      case 4: query_environment()->tell_room( 0, my_name + " suddenly vanishes."); break;
      case 5: query_environment()->tell_room( 0, my_name + " fades out of view."); break;
      case 6: query_environment()->tell_room( 0, my_name + " runs off after his master."); break;
      case 7: query_environment()->tell_room( 0, my_name + " suddenly notices that his master has left, and runs off."); break;
      case 8: query_environment()->tell_room( 0, my_name + " fades into the shadows, and is gone."); break;
      case 9: query_environment()->tell_room( 0, my_name + " snaps his fingers, and is gone."); break;

      }

      move(master->query_environment()->base_name());
      switch( random( 10 ) ) {
      case 0: query_environment()->tell_room( 0, my_name + " follows the light of his life."); break;
      case 1: query_environment()->tell_room( 0, my_name + " follows in his masters footsteps."); break;
      case 2: query_environment()->tell_room( 0, my_name + " appears next to his master in a cloud of smoke."); break;
      case 3: query_environment()->tell_room( 0, my_name + " enters."); break;
      case 4: query_environment()->tell_room( 0, my_name + " appears."); break;
      case 5: query_environment()->tell_room( 0, my_name + " arrives shortly after his master."); break;
      case 6: query_environment()->tell_room( 0, my_name + " comes running, tying to keep up with his master."); break;
      case 7: query_environment()->tell_room( 0, "A humble page enters."); break;
      case 8: query_environment()->tell_room( 0, "A humble person wearing a robe enters."); break;
      case 9: query_environment()->tell_room( 0, my_name + " catches up with his master."); break;
      }
    }
  }
  nFollow = call_out( "follow_master", 2 );
}

void 
parse( string str ) {
   if( str == "go away" || str == "die" || str == "dismissed" ) {
      remove_call_out( nFollow );
      respond( "say It seems " + master_name + " no longer has a need for me." );
      this_environment()->remove_object( this_object() );
      destruct_object( this_object() );
   } else {
      respond( str );
   }
/*   respond("say Parsing: " + str ); */
   /*  respond("say I did not understand you, master.");
       respond("bow fudge"); */
}

void
outside_message( string str ) {

  string pre;

  str = ANSI_D->strip_colors( str );
  str = str[..(strlen(str)-3)];

  pre = capitalize(master_name) + " says: Page, ";

  if( strstr( str, pre ) != -1 ) {
      parse( str[(strlen(pre))..] );
  }
}