/* -*- LPC -*- */ /* * $Locker: $ * $Id: iron_grip.c,v 1.3 2000/05/09 08:02:29 pinkfish Exp $ * $Log: iron_grip.c,v $ * Revision 1.3 2000/05/09 08:02:29 pinkfish * Fix up some stuff. * * Revision 1.2 2000/05/08 03:51:07 pinkfish * Fix up a bunch of problems with starting/resrtarting of effects. * * Revision 1.1 1998/01/06 04:06:32 ceres * Initial revision * */ /** * This is the effect skelton docs. This effect * has a classification of "magic.hands.strength". * <p> * Describe the arguments in here. * @classification magic.hands.strength * @see help::effects */ #include "path.h" #include <effect.h> #include <effects/stat_adjustment.h> #define GRIP 2 #define COST_PER_ROUND 30 /** @ignore yes */ string query_classification() { return "magic.hands.strength"; } /** @ignore yes */ object beginning( object player, object arg ) { tell_object( player, "Your hands clench suddenly.\n" ); player->submit_ee( "decrease_points", 1, EE_ONCE ); player->submit_ee( "decrease_points", ({ 30, 60 }), EE_CONTINUOUS ); player->add_effect(STAT_ADJUSTMENT_EFFECT, ({ arg, ([ "str" : GRIP ]) })); return arg; } /* beginning() */ void restart( object player ) { //player->adjust_bonus_str( GRIP ); } /* restart() */ /** @ignore yes */ void merge_effect( object player, mixed arg, mixed arg2) { if (!arg && arg2) { player->submit_ee( "decrease_points", 1, EE_ONCE ); player->submit_ee( "decrease_points", ({ 30, 60 }), EE_CONTINUOUS ); player->add_effect(STAT_ADJUSTMENT_EFFECT, ({ arg, ([ "str" : GRIP ]) })); } return arg2; } /* merge_effect() */ /** @ignore yes */ void end( object player, object arg ) { //player->adjust_bonus_str( -GRIP ); STAT_ADJUSTMENT_EFFECT->remove_stat_adjustment_ob(player, arg); tell_object( player, "Your hands twitch and feel weak.\n" ); } /* end() */ int test_for_effect( object thing ) { if ( !thing ) { return 0; } return member_array( file_name( this_object() ), (string *)thing->query_wear_effects() ) != -1; } /* test_for_effect() */ void decrease_points( object player ) { if ( player->query_auto_loading() ) { return; } if ( !sizeof( filter_array( (object *)player->query_armours(), "test_for_effect", this_object() ) ) ) { player->submit_ee( 0, 0, EE_REMOVE ); return; } if ( (int)player->query_gp() <= COST_PER_ROUND ) { player->submit_ee( 0, 0, EE_REMOVE ); return; } player->clear_gp_info(); player->adjust_gp( -COST_PER_ROUND ); } /* decrease_points() */ /** * This is called when the gloves are removed.. */ void person_removing_item(object item, object player) { int* ids; if (!player) { return ; } ids = player->effects_matching(query_classification()); if (sizeof(ids)) { player->delete_effect(ids[0]); } } /* person_removing__item() */