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("garlick"); set_short("fairy godmother"); add_alias("godmother"); add_adjective("fairy"); set_long( "In the realm of Fairy Godmothers, this one must certainly " "take honours in a Division Yet To Be Announced. Grimly determined " "to do things properly, she has woven wild flowers in her " "windswept, golden locks, powdered her face to a fashionable pallor " "and has attired herself in numerous fluttering shawls, bangles, " "and a vivid green gown. The overall effect is that of a maypole " "with a flower box emptied over its head that happens to jingle like " "a tinker's wagon with a broken wheel. With one hand she clutches her " "regulation wand and with the other she dabs at her red and dripping " "nose with a damp scrap of lace.\n"); set_race("human"); set_guild("witch"); set_level(200); set_gender(2); set_language("general"); set_response_mon_understand_anything(1); add_property( "anchor", 1); ARMOURY->request_item("startling green dress", 100)->move( this_object() ); ARMOURY->request_item("spiderweb shawl", 100)->move( this_object() ); ARMOURY->request_item("pumps", 50)->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"); } /* 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 Umm. Hi. You are lost? Would you like me to get " "you back to " + safeplace + "?" ); queue_command( "emote waves her wand around a bit." ); tell_room(environment(), "A puff of smoke drifts away from where something else used to " "be. Now residing there is a pumpkin.\n"); ARMOURY->request_item("pumpkin", 100)->move(environment()); queue_command( "say Whoops." ); lost = pl; start_time = time(); prodded = 0; call_out("do_prod", 30); } /* do_panic() */ int query_waiting() { return time()-start_time; } void yes_response(object ob) { if (ob != lost) return ; queue_command( "say Oh, ahhh. Good." ); queue_command( "peer wor" ); tell_object( lost, the_short() + " waves her wand in your direction.\n"); tell_room( environment(), the_short() + " waves her wand in " + lost->the_short() + "'s direction.\n", lost ); PANIC_HANDLER->finish_panic(lost, PANIC_OK); /* A couple of pumpkins for good luck. */ ARMOURY->request_item("pumpkin", 100)->move(lost); ARMOURY->request_item("pumpkin", 100)->move(environment(lost)); lost = 0; } /* yes_response() */ void no_response(object ob) { if(ob != lost) return; queue_command( "say Oh, I must have got lost somewhere then." ); queue_command( "wave" ); queue_command( "say Oh dear." ); ARMOURY->request_item("pumpkin", 100)->move(lost); ARMOURY->request_item("pumpkin", 100)->move(environment(lost)); PANIC_HANDLER->finish_panic(lost, PANIC_NOT_OK); lost = 0; } /* no_response() */ void do_prod() { if(!lost) return; if (prodded < 3 ) { queue_command( "say Umm....so....what do you think? Do you want " "my help?" ); queue_command( "expect "+lost->query_name() ); prodded ++ ; call_out("do_prod", 60); } else { queue_command( "say Oh well. I guess it wasn't me you wanted after all" ); queue_command( "sigh" ); PANIC_HANDLER->finish_panic(lost, PANIC_NOT_OK); lost = 0; } } /* do_prod() */ void event_exit(object ob, string message, object to) { if (ob == lost) { queue_command( "say Bye..." ); queue_command( "wave" ); queue_command( "say Whoops." ); queue_command( "tell "+lost->query_name()+" Sorry to have bothered you." ); PANIC_HANDLER->finish_panic(lost, PANIC_NOT_OK); ARMOURY->request_item("pumpkin", 100)->move(environment(lost)); lost = 0; } } /* event_exit() */ void hurry_up() { if (!lost) { /* If the player has buggered off, we give up */ queue_command( "blink twice" ); queue_command( "say I guess my help wasn't wanted, then..." ); PANIC_HANDLER->finish_panic(lost, PANIC_NOT_OK); lost = 0; } else do_prod(); } /* hurry_up() */ void event_fight_in_progress(object attacker, object attackee) { if (attackee == this_object()) { queue_command( "say Look, this is really not very nice." ); queue_command( "frown" ); queue_command( "say I know the art of self defence you know!" ); set_hp(query_max_hp(), attacker); attackee->adjust_tmp_str(-2); attackee->adjust_tmp_dex(-2); attackee->adjust_tmp_wis(-2); attackee->adjust_tmp_int(-2); attackee->adjust_tmp_con(-2); attackee->add_property("attacked godmother", time()); PANIC_HANDLER->finish_panic(lost, PANIC_NOT_OK); lost = 0; } } /* event_fight_in_progress() */ void finish_up() { queue_command( "shuffle" ); queue_command( "say Umm. I have to go." ); queue_command( "smile appol" ); queue_command( "wave" ); PANIC_HANDLER->finish_panic(lost, PANIC_NOT_OK); lost = 0; } /* finish_up() */ void dest_me() { if (lost) { PANIC_HANDLER->finish_panic(lost, PANIC_NOT_OK); lost = 0; } ::dest_me(); } /* dest_me() */ int unambushable() { return 1; }