inherit "/obj/monster";
#include <panic.h>
#include <armoury.h>
void finish_up();
int state, start_time, prodded;
object lost;
string safeplace;
void setup() {
start_time = time();
set_name( "godmother" );
set_short( "fairy godmother" );
add_adjective( "fairy" );
set_long( "This fairy godmother isn't quite what you expected. She is "
"tall and forbidding; not in the slightest bit cuddly or smiley. She "
"looks slightly uncomfortable and is currently glaring at her wand, "
"which appears to be malfunctioning. If you cross her, you might find "
"yourself turned into a wombat or worse.\n" );
set_race( "human" );
set_guild( "witch" );
set_level( 300 );
set_gender( 2 );
set_language("general");
set_response_mon_understand_anything(1);
add_property( "anchor", 1);
ARMOURY->request_item("hobnailed boots", 100)->move( this_object() );
ARMOURY->request_item("antique black dress", 100)->move( this_object() );
ARMOURY->request_item("witchs pointy hat", 100)->move( this_object() );
ARMOURY->request_item("black witches cloak", 100)->move( this_object() );
init_equip();
add_respond_to_with(({ "yes" }), "#yes_response");
add_respond_to_with(({ "@nod" }), "#yes_response");
add_respond_to_with(({ "no" }), "#no_response");
add_respond_to_with(({ "@shake" }), "#no_response");
add_respond_to_with(({ "@think", "somewhere", "safe" }), "#think_safe");
add_respond_to_with(({ "@think", "safe" }), "#think_safe");
add_respond_to_with(({ "@think", "safety" }), "#think_safe");
add_respond_to_with(({ "@womble" }), "#think_mended_drum");
} /* setup() */
void do_panic(object pl) {
string home;
string nationality;
nationality = pl->query_nationality();
if ( !nationality ) {
queue_command( "say Oops.. you haven't got a nationality, I can't "
"send you home!");
finish_up();
return;
}
home = nationality->query_default_start_location();
safeplace = home->query_short();
queue_command( "say I hope you're not foreign. You know, where "
"you gabble at me in heathen lingo and eat foreign muck and "
"worship objects." );
queue_command( "say So. You want some help to get back to the "
+ safeplace + "?" );
queue_command( "glare "+pl->query_name() );
lost = pl;
start_time = time();
} /* do_panic() */
int query_waiting() { return time()-start_time; }
void yes_response(object ob) {
if (ob != lost)
return ;
queue_command( "say Right then. Close your eyes and concentrate." );
queue_command( "say Think of somewhere safe." );
prodded = 0;
call_out("check_think", 30);
} /* yes_response() */
void no_response(object ob) {
if (ob != lost)
return ;
queue_command( "say So why did you call me up then?", 1 );
queue_command( "roll eyes "+lost->query_name() );
queue_command( "pinch "+lost->query_name()+" cheek" );
PANIC_HANDLER->finish_panic(lost, PANIC_NOT_OK);
lost = 0;
} /* no_response() */
void think_safe(object ob) {
if (ob != lost)
return ;
queue_command( "say Now the world will just rearrange itself "
"to suit you." );
PANIC_HANDLER->finish_panic(lost, PANIC_OK);
lost = 0;
} /* think_safe() */
void check_think() {
if(!lost)
return;
if (prodded < 3 ) {
queue_command( "say Come on, I haven't got all day. Just think of "
"safety." );
queue_command( "tap" );
prodded ++ ;
call_out("check_think", 60);
} else {
queue_command( "say Young people of today..." );
queue_command( "mutter no manners" );
PANIC_HANDLER->finish_panic(lost, PANIC_NOT_OK);
lost = 0;
}
} /* check_think() */
void event_exit(object ob, string message, object to) {
if (ob == lost) {
queue_command("hrmph");
queue_command("tell "+lost->query_name()+" Thats right! Just walk "
"out on me.");
queue_command("glare "+lost->query_name() );
PANIC_HANDLER->finish_panic(lost, PANIC_NOT_OK);
lost = 0;
}
} /* event_exit() */
void event_fight_in_progress(object attacker, object attackee) {
if (attackee == this_object()) {
/* Someone is attacking us! */
attacker->adjust_tmp_str(-4);
attacker->adjust_tmp_con(-4);
attacker->adjust_tmp_dex(-4);
attacker->adjust_tmp_int(-4);
attacker->adjust_tmp_wis(-4);
queue_command( "say What is this travesty! Attacking your fairy "
"godmother, Well I never." );
queue_command( "say "+attacker->one_short()+" I here by curse you!" );
queue_command( "say Don't expect me to help you again." );
queue_command( "glare "+attacker->query_name() );
attacker->add_property("attacked godmother", time());
PANIC_HANDLER->finish_panic(lost, PANIC_NOT_OK);
lost = 0;
}
} /* event_fight_in_progress() */
void hurry_up() {
if (!lost) {
/* If the player has buggered off, we give up */
queue_command( "blink" );
queue_command( "say Where'd that bugger go? Oh well.");
PANIC_HANDLER->finish_panic(lost, PANIC_NOT_OK);
lost = 0;
}
else check_think();
} /* hurry_up() */
void finish_up() {
if (lost) {
queue_command( "say Well. You took too long. What a complete "
"waste of time." );
queue_command( "glare " + lost->query_name() );
lost = 0;
}
else {
queue_command( "peer" );
queue_command( "say Damn, they buggered off somewhere. I hate "
"it when they do that." );
queue_command( "scowl" );
}
PANIC_HANDLER->finish_panic(lost, PANIC_NOT_OK);
} /* finish_up() */
void event_dest(object ob) {
if (ob == lost) {
PANIC_HANDLER->finish_panic(lost, PANIC_NOT_OK);
lost = 0;
}
} /* event_dest() */
void dest_me() {
if (lost) {
PANIC_HANDLER->finish_panic(lost, PANIC_NOT_OK);
lost = 0;
}
::dest_me();
} /* dest_me() */
int unambushable() {
return 1;
}