/*
* Temple and new recall code for Age of Infinity MUD
* (c)1999 by Theodryck (Joe Brimingham). Please feel
* free to use this code and distribute. All I require
* is that the documentation remain intact.
*
* This code essentially allows players to chose various
* places to set as their point of recall. Must be type
* ROOM_TEMPLE in order to choose as a temple though
*/
/* Ability to recall to various places around the mud
by Theodryck */
/* In merc.h add this to the pcdata struct */
int temple;
/* Declare the room type */
#define ROOM_TEMPLE BV17
/*add the command to the DECLARE_DO_FUN section */
DECLARE_DO_FUN( do_temple ) /* Theodryck of Age of Infinity MUD */
void do_temple( CHAR_DATA *ch, char * argument )
{
char buf[MAX_STRING_LENGTH];
if (!IS_SET(ch->in_room->room_flags, ROOM_TEMPLE) )
{
sprintf( buf, "You are not in a temple.\n\r" );
send_to_char( buf, ch );
return;
}
ch->pcdata->temple = ch->in_room->vnum;
send_to_char( "You are now templed here." , ch );
return;
}
/*
* Next is my new version of do recall.
* You may wish to change it in order to suit
* the temple vnums of your areas.
* -- Theo
*/
void do_recall( CHAR_DATA *ch, char *argument )
{
CHAR_DATA *victim;
ROOM_INDEX_DATA *location;
char buf [ MAX_STRING_LENGTH ];
int place;
/* Wynter - just stopping silly ppl from crashing mud by making mobs recall */
if ( IS_NPC ( ch ) )
return;
act( "$n prays for transportation!", ch, NULL, NULL, TO_ROOM );
if ( IS_SET( ch->in_room->room_flags, ROOM_NO_RECALL )
|| IS_AFFECTED( ch, AFF_CURSE ) )
{
send_to_char( "God has forsaken you.\n\r", ch );
return;
}
if(ch->pcdata->temple != 0 )
place = ch->pcdata->temple;
else
place = 3001;
/*if(IS_SET(ch->act, PLR_BATTLE) ) Part of my battle code. Ignore unless you choose to add it
place = 24050; */
if ( !( location = get_room_index( place ) ) )
{
send_to_char( "You are completely lost.\n\r", ch );
return;
}
if ( ch->in_room == location )
return;
if ( ( victim = ch->fighting ) ) /*Again, if using my battle code add: && (!IS_SET( ch->act, PLR_BATTLE ) ) */
{
int lose;
if ( number_bits( 1 ) == 0 )
{
WAIT_STATE( ch, 4 );
if ( ch->level < 100 )
lose = ( ch->level * ch->level * 50 );
else
lose = ( ch->level * ch->level * ch->level );
gain_exp( ch, 0 - lose );
sprintf( buf, "You failed! You lose %d exps.\n\r", lose );
send_to_char( buf, ch );
return;
}
if ( ch->level < 100 )
lose = ( ch->level * ch->level * 50 );
else
lose = ( ch->level * ch->level * ch->level );
gain_exp( ch, 0 - lose );
sprintf( buf, "You recall from combat! You lose %d exps.\n\r", lose );
send_to_char( buf, ch );
stop_fighting( ch, TRUE );
}
ch->move /= 2;
act( "$n disappears.", ch, NULL, NULL, TO_ROOM );
char_from_room( ch );
char_to_room( ch, location );
act( "$n appears in the room.", ch, NULL, NULL, TO_ROOM );
do_look( ch, "auto" );
return;
}
/*And lastly the function to the command table in interp.c */
{ "temple", do_temple, POS_DEAD, 0, LOG_NORMAL, 1 },
/*
* And that's pretty much it. Don't forget to add the fields
* for temple in save.c. You shouldn't have any problems with
* doing that though.
* Comments or suggestions? Email me: theo@envy.com
*/