#include <sys/types.h>
#include <stdio.h>
#include <syslog.h>
#include "define.h"
#include "struct.h"
void do_pray( char_data* ch, char* argument )
{
obj_data* obj;
char_data* victim = ch;
player_data* pc = player( ch );
int prayer;
int need;
if( is_mob( ch ) )
return;
if( ch->pcdata->religion == REL_NONE ) {
send( ch, "You are not the follower of any god and cannot expect aid.\n\r" );
return;
}
if( *argument != '\0'
&& ( victim = one_character( ch, argument, "pray for",
ch->array ) ) == NULL )
return;
if( ch->shdata->alignment == ALGN_CHAOTIC_EVIL ) {
send( ch,
"As a chaotic evil, the gods will never answer your prayers.\n\r" );
return;
}
if( is_set( &ch->in_room->room_flags, RFLAG_NO_PRAY ) ) {
send( ch, "As you pray you feel a cold chill touch your soul, you\
doubt there will be\n\rany aid forthcoming here.\n\r" );
return;
}
prayer = pc->prayer;
if( victim != ch )
need = 0;
else if( victim->fighting == NULL )
need = victim->max_hit/3;
else
need = victim->max_hit/4;
if( prayer > 150 && victim->hit < need ) {
prayer -= 150;
victim->hit = victim->max_hit;
update_pos( victim );
update_max_move( victim );
victim->move = victim->max_move;
send( victim, "A dim light surrounds you curing your wounds.\n\r" );
send( *victim->array, "A dim light surrounds %s curing %s wounds.\n\r",
victim, victim->His_Her( ) );
}
if( is_set( victim->affected_by, AFF_BLIND ) && prayer > 200 ) {
prayer -= 200;
strip_affect( victim, AFF_BLIND );
}
if( is_set( victim->affected_by, AFF_POISON ) && prayer > 150 ) {
prayer -= 150;
strip_affect( victim, AFF_POISON );
}
if( victim == ch ) {
if( ch->pcdata->condition[COND_FULL] < 0 && prayer > 30 ) {
prayer -= 30;
ch->pcdata->condition[COND_FULL] = 30;
send( ch, "Your stomach feels full.\n\r" );
}
if( ch->pcdata->condition[COND_THIRST] < 0 && prayer > 30 ) {
prayer -= 30;
ch->pcdata->condition[COND_THIRST] = 30;
send( ch, "You no longer feel thirsty.\n\r" );
}
if( ch->in_room->is_dark( ) && prayer > 30
&& !is_set( ch->affected_by, AFF_INFRARED )
&& !is_set( ch->affected_by, AFF_BLIND ) ) {
prayer -= 30;
obj = create( get_obj_index( OBJ_BALL_OF_LIGHT ) );
send( ch, "%s appears in your hand.\n\r", obj );
send_seen( ch, "%s appears in %s's hand.\n\r", obj, ch );
obj->To( ch );
consolidate( obj );
}
if( ch->move < 10 && ch->max_move > 20 && prayer > 20 ) {
prayer -= 20;
ch->move = ch->max_move;
send( ch, "You feel rejuvinated.\n\r" );
}
}
if( prayer == pc->prayer ) {
if( ch == victim )
send( ch, "You pray to the gods to no avail.\n\r" );
else
fsend( ch, "You pray for the soul of %s to no avail.", victim );
}
pc->prayer = max( 0, prayer );
}
/*
* SACRIFICE
*/
void do_sacrifice( char_data* ch, char* argument )
{
char arg [ MAX_INPUT_LENGTH ];
action_data* action;
obj_data* obj;
player_data* pc;
int cost;
int i;
if( is_mob( ch ) )
return;
if( !is_set( &ch->in_room->room_flags, RFLAG_ALTAR ) ) {
send( ch, "Sacrifices will only be recognized at altars.\n\r" );
return;
}
if( *argument == '\0' ) {
send( ch, "The gods do not value empty sacrifices.\n\r" );
return;
}
if( !two_argument( argument, "to", arg ) ) {
send( ch, "Syntax: sacrifice <object> to <diety>.\n\r" );
return;
}
for( i = 1; ; i++ ) {
if( i == MAX_ENTRY_RELIGION ) {
send( ch, "Unknown diety.\n\r" );
return;
}
if( matches( argument, religion_table[i].name ) )
break;
}
if( ( obj = one_object( ch, arg, "sacrifice",
ch->array, &ch->contents ) ) == NULL )
return;
if( obj->array != ch->array ) {
send( ch, "You must drop %s first to sacrifice it.\n\r", obj );
return;
}
if( is_set( obj->pIndexData->extra_flags, OFLAG_NOSACRIFICE ) ) {
send( ch, "The gods grow angry at your impudence.\n\r" );
return;
}
if( !can_wear( obj, ITEM_TAKE ) ) {
send( ch,
"%s is immovable and this makes the required ritual impossible.\n\r",
obj );
return;
}
if( !forbidden( obj, ch ) ) {
send( ch, "You are forbidden from sacrificing %s.\n\r", obj );
return;
}
for( action = ch->in_room->action; action != NULL; action = action->next )
if( action->trigger == TRIGGER_SACRIFICE
&& obj->pIndexData->vnum == action->value ) {
var_ch = ch;
var_obj = obj;
var_room = ch->in_room;
execute( action );
return;
}
ch->pcdata->religion = i;
fsend( ch, "You sacrifice %s to %s.\n\r", obj,
religion_table[i].name );
fsend_seen( ch, "%s sacrifices %s to %s.\n\r",
ch, obj, religion_table[i].name );
if( ( pc = player( ch ) ) != NULL ) {
pc->reputation.gold += obj->Cost( );
if( obj->pIndexData->item_type == ITEM_CORPSE )
pc->reputation.blood++;
if( is_set( obj->extra_flags, OFLAG_MAGIC ) )
pc->reputation.magic += 1+obj->Cost( )/1000;
}
obj->Extract( 1 );
}