// Seems to fail when moving sometimes. #include <npc/transport.h> #include <broadcaster.h> inherit TRANSPORT_INHERIT; private int _quiet; /** * This method sets the quiet flag on the camel. If they are quiet * they will not say anything when they do commands and so on. * @param quiet the new value for the quiet flag */ void set_quiet( int quiet ) { _quiet = quiet; } /* set_quiet() */ /** * This method queries the quiet flag on the camel. If they are quiet * they will not say anything when they do commands and so on. * @return the current setting of the quiet flag */ int query_quiet() { return _quiet; } /* query_quiet() */ /** @ignore yes */ void hear_name( object player, string mess ) { string *bits; string str; int allowed; if ( !player ) { return ; } if ( is_allowed_to_use( player->query_name() ) ) { // // Ok, lets see if they asked us to do anything... // bits = explode( mess, " " ) - ({ "" }); foreach ( str in bits ) { switch ( str ) { case "follow" : do_command( "follow " + player->query_name() ); break; case "stop" : do_command( "unfollow " + player->query_name() ); break; case "stay" : do_command( "unfollow all" ); break; case "quiet" : set_quiet(1); break; case "speak" : case "talk" : set_quiet(0); break; } } allowed = 1; } if ( !query_quiet() ) { if ( allowed ) { if( player->query_visible( this_object() ) ) do_command( "slook " + player->query_name() ); } switch ( random(3) ) { case 0: do_command( "spit" ); break; case 1: do_command( ":ruminates." ); break; case 2: do_command( ":looks thoughtful." ); break; } } } /* hear_name() */ /** @ignore yes */ void event_person_shout( object thing, string start, string mess, string lang, int *co_ord, int range ) { if ( !environment() ) return; if ( environment()->query_property( "shout zone" ) != environment( this_player() )->query_property( "shout zone" ) || !thing ) { return; } mess = lower_case( mess ); if ( is_allowed_to_use( thing->query_name() ) ) { if ( strsrch( mess, lower_case( query_transport_name() ) ) != -1 ) { if (strsrch( mess, "come here" ) != -1) { if ( !query_quiet() ) { do_command( "grumble" ); } add_effect( "/std/effects/npc/goto_destination", environment(thing) ); } } } } /* event_person_shout() */ /** @ignore yes */ mapping query_dynamic_auto_load() { return ([ "::" : ::query_dynamic_auto_load(), "quiet" : query_quiet() ]); } /* query_dynamic_auto_load() */ /** @ignore yes */ void setup_responses() { add_respond_to_with( explode( lower_case( query_transport_base_name() ), " " ), (: hear_name :) ); BROADCASTER->npc_hear_shouts( this_object() ); } /* setup_responses() */ /** @ignore yes */ void init_dynamic_arg( mapping map ) { ::init_dynamic_arg( map["::"] ); if ( map["quiet"] ) { set_quiet( map["quiet"] ); } if ( query_transport_name() ) { setup_responses(); set_short( query_transport_name() ); add_adjective( explode( lower_case( query_transport_name() ), " " ) - ({ "the" }) ); add_property( "determinate", "" ); add_alias( explode( lower_case( query_transport_name() ), " " ) - ({ "the" }) ); } } /* init_dynamic_arg() */ /** @ignore */ int do_name( string name ) { if ( ::do_name( name ) ) { setup_responses(); set_short( query_transport_name() ); return 1; } return 0; } /* do_name() */