/* -*- LPC -*- */ /* * $Locker: $ * $Id: elven_sight.c,v 1.6 2000/05/09 08:02:29 pinkfish Exp $ * $Log: elven_sight.c,v $ * Revision 1.6 2000/05/09 08:02:29 pinkfish * Fix up some stuff. * * Revision 1.5 2000/05/08 07:51:23 pinkfish * Fix up all the problems with stats and stupid gloves and stuff. * * Revision 1.4 2000/05/08 03:51:07 pinkfish * Fix up a bunch of problems with starting/resrtarting of effects. * * Revision 1.3 2000/05/08 00:52:35 pinkfish * Make sure it gets an argument... * * Revision 1.2 2000/03/28 21:23:22 ceres * Cap/helm fixes * * 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.stats.sight". * <p> * Describe the arguments in here. * <p> * This effect has a shadow associated with it. * @classification magic.stats.sight * @see help::effects */ #include "path.h" #include <effect.h> #include <effects/stat_adjustment.h> /** @ignore yes */ string query_classification() { return "magic.stats.sight"; } /** @ignore yes */ string query_shadow_ob() { return SHADOWS +"elven_sight"; } /** @ignore yes */ mixed* beginning( object player, object arg ) { if (!arg) { arg = previous_object(); } tell_object( player, "Your eyes prickle for a moment.\n" ); player->submit_ee( "side_effects", ({ 60, 120 }), EE_CONTINUOUS ); player->set_active( "elven sight" ); player->add_effect(STAT_ADJUSTMENT_EFFECT, ({ arg, ([ "con" : -3, "int" : 3, "wis" : 2 ]) })); return ({ arg, 0 }); } /* beginning() */ /** @ignore yes */ mixed merge_effect( object player, mixed pain1, int pain2, int id ) { if (!pointerp(pain1)) { call_out((: $1->delete_effect($2) :), 0, player, player->query_current_effect_enum()); return ({ pain2, 0 }); } if (!pain1[0] && pain2) { pain1[0] = pain2; player->add_effect(STAT_ADJUSTMENT_EFFECT, ({ pain1[0], (["wis" : 2, "con": -3, "int" : 3 ]) })); } player->submit_ee( "side_effects", ({ 60, 120 }), EE_CONTINUOUS ); return pain1; } /* merge_effect() */ /** @ignore yes */ void end( object player, mixed arg ) { STAT_ADJUSTMENT_EFFECT->remove_stat_adjustment_ob(player, arg[0]); tell_object( player, "You feel dizzy for a moment, but it passes.\n" ); player->set_inactive( "elven sight" ); } /* end() */ void hurt_player( object player, int pain ) { string race; switch( pain ) { case 0 : break; case 1 .. 50 : tell_object( player, "You feel a mild twinge behind your " "eyes.\n" ); break; case 51 .. 200 : player->remove_hide_invis( "hiding" ); tell_object( player, "You feel a sharp stabbing pain between " "your ears.\n" ); tell_room( environment( player ), (string)player->one_short() + " winces.\n", player ); break; case 201 .. 800 : player->remove_hide_invis( "hiding" ); tell_object( player, "Your eyes bulge and you gasp with the " "pain exploding inside your head.\n" ); tell_room( environment( player ), (string)player->one_short() + "'s eyes bulge and "+ (string)player->query_pronoun() + " gasps in pain.\n", player ); break; default : player->remove_hide_invis( "hiding" ); tell_object( player, "Your whole body goes rigid with the " "thunderous detonation of pain taking place behind your " "eyes.\n" ); tell_room( environment( player ), (string)player->one_short() + " goes rigid in sudden pain and cries out loud.\n", player ); } race = (string)player->query_race_ob(); pain *= (int)race->query_weight(); pain /= (int)HUMAN->query_weight(); pain -= (int)player->query_ac( "mental", pain ); if ( (int)player->adjust_hp( -pain ) < 0 ) player->attack_by( this_object() ); } /* hurt_player() */ void side_effects( object player, mixed stuff, int id ) { int times; int pain; if ( userp( player ) && !interactive( player ) ) return; pain = stuff[1]; times = sizeof( filter_array( (object *)player->query_wearing(), (: member_array( file_name( this_object() ), (string *)$1->query_wear_effects() ) != -1 :) ) ); if ( !times ) { player->set_inactive( "elven sight" ); STAT_ADJUSTMENT_EFFECT->remove_stat_adjustment_ob(player, stuff[0]); if ( !pain ) { player->submit_ee( 0, 0, EE_REMOVE ); } else if ( pain == 1 ) { pain = 0; tell_object( player, "Your headache has finally gone.\n" ); } else { pain /= 4; hurt_player( player, pain ); tell_object( player, "Your headache seems to be getting better.\n" ); } } else if ( !pain ) { pain = 1; hurt_player( player, pain ); tell_object( player, "You feel a headache coming on.\n" ); } else { pain *= 2 * times; hurt_player( player, pain ); tell_object( player, "Your headache seems to be getting worse.\n" "Maybe it's something you're wearing?\n" ); } player->set_arg_of( (int)player->sid_to_enum( id ), ({ stuff[0], pain }) ); } /* side_effects() */ string query_name() { return "elven sight enchantment"; }