/** * This is the effect shadow for the lpick command effect. * @author Sandoz, Nov. 2002. */ inherit "/std/effect_shadow"; class lockpick_data { object door; object pick; int diff; int delay; int stage; } /** @ignore yes */ int queue_commands() { return 1; } /** * This method returns the lock (door) object we are currently in the * middle of picking. * @return the door object we are lpicking */ object query_lockpicking() { return arg()->door; } /** @ignore yes */ void interrupt_lockpicking() { class lockpick_data data; if( classp( data = arg() ) ) { data->door->remove_property("lockpicked"); if( !data->stage ) { tell_object( player, "You hastily stop scrutinizing the lock on "+ data->door->the_short()+".\n"); tell_room( player, player->the_short()+" hastily stops " "scrutinizing the lock on "+data->door->the_short()+".\n", player ); } else { tell_object( player, "You hastily pull "+ data->pick->the_short()+" out of the lock on "+ data->door->the_short()+".\n"); tell_room( player, player->the_short()+" hastily pulls "+ data->pick->poss_short()+" out of the lock on "+ data->door->the_short()+".\n", player ); } } remove_this_effect(); } /* interrupt_lockpicking() */ /** @ignore yes */ void event_move_object( mixed from, mixed to ) { class lockpick_data data = arg(); object who = player; if( !data->stage ) { tell_object( who, "You stop scrutinizing the lock on "+ data->door->the_short()+" as you leave.\n"); tell_room( who, who->the_short()+" stops scrutinizing the lock on "+ data->door->the_short()+" as "+who->HE+" leaves.\n", who ); } else { tell_object( who, "You pull "+data->pick->the_short()+" out of the " "lock on "+data->door->the_short()+" as you leave.\n"); tell_room( who, who->the_short()+" pulls "+ data->pick->poss_short()+" out of the lock on "+ data->door->the_short()+" as "+who->HE+" leaves.\n", who ); } set_arg(0); interrupt_lockpicking(); return who->event_move_object( from, to ); } /* event_move_object() */ /** @ignore yes */ int attack_by( object ob ) { int ret; if( ret = player->attack_by( ob ) ) interrupt_lockpicking(); return ret; } /* attack_by() */ /** @ignore yes */ int attack_ob( object ob ) { int ret; if( ret = player->attack_ob( ob ) ) interrupt_lockpicking(); return ret; } /* attack_by() */ /** @ignore yes */ mixed stats() { class lockpick_data data; data = arg(); return player->stats() + ({ ({"lockpicking", data->door }), ({"lockpick", data->pick }), ({"lockpick difficulty", data->diff }), ({"lockpick delay", data->delay }), ({"lockpick stage", data->stage }), }); } /* stats() */ /** @ignore yes */ void event_door_open( object door, object who ) { class lockpick_data data; data = arg(); player->event_door_open( door, who ); if( door == data->door ) { if( who == player ) return interrupt_lockpicking(); tell_object( player, "You bump your head against "+ door->the_short()+" as "+( query_group(door) ? "they are" : "it is")+" opened.\n"); tell_room( ENV(player), player->the_short()+" bumps "+ player->HIS+" head against "+door->the_short()+" as "+ ( query_group(door) ? "they are" : "it is")+" opened.\n", player ); return interrupt_lockpicking(); } } /* event_door_open() */