/* -*- LPC -*- */
/*
* $Locker: $
* $Id: calm.c,v 1.1 1998/01/06 04:14:00 ceres Exp $
* $Log: calm.c,v $
* Revision 1.1 1998/01/06 04:14:00 ceres
* Initial revision
*
*/
/**
* This is the effect skelton docs. This effect
* has a classification of "body.calm".
* <p>
* Describe the arguments in here.
* @classification body.calm
* @see help::effects
*/
#include <effect.h>
/** @ignore yes */
string query_classification() { return "body.calm"; }
/** @ignore yes */
int beginning( object player, int amount, int id ) {
player->submit_ee( "become_calm", 0, EE_ONCE );
player->submit_ee( "reduce_amount", ({ 10, 20 }), EE_CONTINUOUS );
return amount;
} /* beginning() */
/** @ignore yes */
int merge_effect( object player, int old_amount, int new_amount, int id ) {
return player->expected_tt() + new_amount;
} /* merge_effect() */
/** @ignore yes */
void end( object player, int amount, int id ) {
if ( player->query_property( "dead" ) )
return;
tell_object( player, "You suddenly feel more alert and you take a "+
"fresh interest in your surroundings.\n" );
tell_room( environment( player ), (string)player->one_short() +
" perks up and looks more interested in what's going on.\n",
player );
} /* end() */
void become_calm( object player, int amount, int id ) {
tell_object( player, "You suddenly feel really calm and at peace "+
"with the world.\n" );
tell_room( environment( player ), (string)player->one_short() +
" smiles dreamily and looks really calm.\n", player );
} /* become_calm() */
void reduce_amount( object player, int amount, int id ) {
amount -= (int)player->query_con();
if ( amount < 0 ) {
player->submit_ee( 0, 0, EE_REMOVE );
return;
}
player->set_arg_of( (int)player->sid_to_enum( id ), amount );
call_out( "calm_down", 0, player );
} /* reduce_amount() */
void calm_down( object player ) {
int gone;
if ( sizeof( (int *)player->effects_matching( "fighting.combat" ) ) ) {
player->stop_all_fight();
gone = 1;
}
if ( sizeof( (int *)player->effects_matching( "magic.spell" ) ) ) {
player->interrupt_spell();
gone = 1;
}
if ( sizeof( (int *)player->effects_matching( "faith.ritual" ) ) ) {
player->interrupt_ritual();
gone = 1;
}
if ( gone ) {
tell_object( player, "A wave of lassitude comes over you and you "+
"lose interest in what you were doing.\n" );
tell_room( environment( player ), (string)player->one_short() +
" yawns distractedly.\n", player );
}
} /* calm_down() */
string query_apothecarial_effect() {
return "will bring on a period of apathy with bouts of disinterest";
} /* query_apothecarial_effect() */