inherit NPC_OBJ; int oeid; object owner; mapping knockers; void setup() { set_name( "eye" ); set_short( "floating eye" ); add_adjective( "floating" ); set_main_plural( "floating eyes" ); set_long( "This slightly decayed eye hovers nearby. It looks at you "+ "balefully, but with little interest.\n" ); basic_setup("elemental", 1, 0 ); set_height( 2 ); set_base_weight( 1 ); adjust_bonus_dex( 25 ); knockers = ([ ]); add_property( "wizard eye", 50 ); add_property( "floating", 1 ); add_property( "no fleas", 1 ); } /* setup() */ int attack_by( object thing ) { if ( thing ) { knockers[ thing ]++; if ( knockers[ thing ] > 5 ) { tell_object( thing, "You get fed up with seeing "+ the_short() + " dodge aside, so you stop fighting it.\n" ); thing->stop_fight( this_object() ); map_delete( knockers, thing ); return 0; } } return 1; } /* attack_by() */ void attack_ob( object thing ) { return; } int query_unambushable() { return 1; } void do_ambushed() { write( "The eye quickly floats out of reach.\n" ); say( "The eye quickly floats away from "+ (string)this_player()->one_short() +".\n" ); } /* do_ambushed() */ int query_skill_bonus( string word ) { if ( sscanf( word, "%*sdodging%*s" ) == 2 ) return 1000000; return ::query_skill_bonus( word ); } /* query_skill_bonus() */ int query_oeid() { return oeid; } object query_owner() { return owner; } int query_slave() { return objectp( owner ); } void set_owner( object thing, int number ) { owner = thing; oeid = number; } /* set_owner() */ void go_away() { if ( objectp( owner ) ) tell_object( owner, "You lose contact with your eye.\n" ); tell_room( environment(), the_short() +" falls apart, crumbling " "into dust.\n", this_object() ); owner = 0; move( "/room/rubbish" ); } /* go_away() */ int second_life() { if ( objectp( owner ) ) owner->delete_effect( (int)owner->sid_to_enum( oeid ) ); else go_away(); return 1; } /* second_life() */ void add_message( string message, mixed *things ) { string bit; if ( objectp( owner ) ) { sscanf( message, "$P$%s$P$", bit, message ); message = "$I$ 6,6=(eye) $C$"+ evaluate_message( reform_message( message, things ) ) + "$I$ -6,-6="; if ( stringp( bit ) ) message = "$P$"+ bit +"$P$"+ message; owner->add_message( message, ({ }) ); } else call_out( "go_away", 0 ); } /* add_message() */ void event_person_say( object thing, string start, string mess, string lang ) { add_message( "$C$$0$ opens and closes "+ (string)thing->query_possessive() + " mouth.\n", ({ ({ "my_one_short:"+ file_name( thing ) }) }) ); } /* event_person_say() */ void event_person_shout( object thing, string start, string mess, string lang ) { if ( environment( thing) != environment() ) return; add_message( "$C$$0$ opens and closes "+ (string)thing->query_possessive() + " mouth.\n", ({ ({ "my_one_short:"+ file_name( thing ) }) }) ); } /* event_person_shout() */