inherit NPC_OBJ;
object caster;
int do_firewrite( string text );
void setup() {
set_name("imp");
set_short("fiery imp");
add_adjective("ghastly little fiery");
set_long("This is a ghastly little fiery imp. It floats just out of "
"reach, but you wouldn't want to go too close to it because of the "
"heat and smell of brimstone.\n");
basic_setup("imp", 15, 0 );
set_msgin("$N hop$s in from $F.");
set_msgout("$N hop$s out to $T.");
set_mmsgout("$N %vanish% in a sudden flash of flame.");
set_mmsgin("$N appear$s in a sudden flash of flame.");
} /* setup() */
void set_caster( object thing ) { caster = thing; }
object query_caster() { return caster; }
void init() {
if( TP == caster )
TP->add_command("firewrite", TO, "<string'text'>",
(: do_firewrite($4[0]) :) );
} /* init() */
int adjust_hp( int hp, object attacker ) {
if( hp < 0 )
tell_object( attacker, "The imp moves quickly out of the way of "
"your blow.\n" );
return 0;
} /* adjust_hp() */
int do_firewrite( string text ) {
if( !caster || TP != caster ) {
init_command("signore "+(string)TP->query_name(), 2 );
return notify_fail("");
}
FIREWORK_H->random_firework( TP, text );
do_command("grimace");
call_out("go_away", 2 );
caster = 0;
return 1;
} /* do_firework() */
void go_away() {
do_command(":seems to implode on itself, leaving behind a small dot of "
"flame which shoots up into the sky.");
call_out("dest_me", 2 );
} /* go_away() */
void event_dest_me( object thing ) {
if( thing == caster ) {
do_command( "'Free! Free!" );
do_command( "zip" );
call_out("go_away", 2 );
caster = 0;
}
} /* event_dest_me() */
void event_exit( object thing, string dir, object to ) {
if( thing == caster && to != environment() ) {
do_command("'Free! Free!");
do_command("zip");
call_out("go_away", 2 );
caster = 0;
}
} /* event_exit() */