/**
* This is the effect shadow for shielding rituals.
* Sandoz 2001.
*/
inherit "/std/effect_shadow";
private int ac;
private string cloak;
/**
* This method sets the armour class and a description of the cloak for
* the shield shadow, so that query_ac() wouldn't have to call arg()
* every time we are hit.
* @param i the armour class to set
* @param str the description of the cloak
*/
void setup_faith_shield( int i, string str ) {
ac = i;
cloak = str;
} /* setup_faith_shield() */
/**
* This method returns the armour class of the faith shield.
* @return the armour class of the faith shield
*/
int query_faith_shield_ac() { return ac; }
/** @ignore yes */
varargs int query_ac( string type, int amount, string zone ) {
int player_ac;
amount -= ac;
if( amount < 1 ) {
player->set_stopped( cloak );
return ac;
}
player_ac = (int)player->query_ac( type, amount, zone );
player->set_stopped( cloak );
return ac + player_ac;
} /* query_ac() */
/** @ignore yes */
varargs int adjust_hp( int num, object attacker, object wep, string attack ) {
// Make sure we don't backlash on ourselves etc.
if( !random( 4 ) && num < -ac && objectp(attacker) &&
attacker != player && objectp(wep) &&
( !attack || attack != "disarm") && ENV(attacker) == ENV(player) ) {
int back = num * ac / 160;
if( back < num / 2 )
back = num / 2;
tell_room( ENV(attacker), "With a crackle, "+
(string)player->poss_short()+" "+cloak+" lashes back at "+
(string)attacker->one_short()+".\n", player );
tell_object( player, "Your "+cloak+" lashes back at "+
(string)attacker->the_short()+" with a crackle.\n" );
attacker->adjust_hp( back, player );
}
return player->adjust_hp( num, attacker, wep, attack );
} /* adjust_hp() */
/** @ignore yes */
string *query_arcane_shields() {
string deity = arg()[ 2 ];
return player->query_arcane_shields() + ({
"You are protected by the power of "+deity+".",
CAP(player->HE)+" is protected by the power of "+deity+"."});
} /* query_arcane_shields() */