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))..] );
}
}