/*****************************************************************************
* DikuMUD (C) 1990, 1991 by: *
* Sebastian Hammer, Michael Seifert, Hans Henrik Staefeldt, Tom Madsen, *
* and Katja Nyboe. *
*---------------------------------------------------------------------------*
* MERC 2.1 (C) 1992, 1993 by: *
* Michael Chastain, Michael Quan, and Mitchell Tse. *
*---------------------------------------------------------------------------*
* SMAUG 1.4 (C) 1994, 1995, 1996, 1998 by: Derek Snider. *
* Team: Thoric, Altrag, Blodkai, Narn, Haus, Scryn, Rennard, Swordbearer, *
* gorog, Grishnakh, Nivek, Tricops, and Fireblade. *
*---------------------------------------------------------------------------*
* SMAUG 1.7 FUSS by: Samson and others of the SMAUG community. *
* Their contributions are greatly appreciated. *
*---------------------------------------------------------------------------*
* LoP (C) 2006, 2007, 2008 by: the LoP team. *
*---------------------------------------------------------------------------*
* Commands for personal player settings/statictics *
*****************************************************************************/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include "h/mud.h"
char *show_big_nums( int millions, int amount );
CMDF( do_speed )
{
int size;
if( !argument || argument[0] == '\0' )
{
send_to_char( "What would you like to set your speed to? Valid Range is 1 - 32.\r\n", ch );
return;
}
if( ( size = atoi( argument ) ) < 1 || size > 32 )
{
send_to_char( "Invalid speed. Valid Range is 1 - 32.\r\n", ch );
return;
}
ch->pcdata->speed = size;
if( ch->desc )
ch->desc->speed = ch->pcdata->speed;
ch_printf( ch, "Your speed is now set to %d which is %dBytes.\r\n", ch->pcdata->speed, ( 128 * ch->pcdata->speed ) );
}
/* This part will take the stat and see if it should get an increase or not */
void handle_stat( CHAR_DATA *ch, short stat, bool silence )
{
short max;
if( stat < 0 || stat >= STAT_MAX )
{
bug( "%s: trying to increase stat [%d] that isn't there?", __FUNCTION__, stat );
return;
}
max = UMIN( ch->level, ( ( is_npc( ch ) || is_immortal( ch ) ) ? ( MAX_LEVEL + 25 ) : MAX_LEVEL ) );
/* Race max */
if( !is_npc( ch ) && !is_immortal( ch ) && race_table[ch->race] )
max = UMIN( max, race_table[ch->race]->max_stats[stat] );
if( ch->perm_stats[stat] >= max )
{
if( !silence )
ch_printf( ch, "You're already at your max %s for now.\r\n", stattypes[stat] );
return;
}
if( number_percent( ) != 25 )
return;
if( number_percent( ) != 50 )
return;
ch->perm_stats[stat] = URANGE( 1, ( ch->perm_stats[stat] + 1 ), max );
/* Increase other things when stats are increased */
if( stat == STAT_CON )
{
ch->max_hit = UMAX( ch->max_hit, ( ch->max_hit + 5 ) );
ch->max_move = UMAX( ch->max_move, ( ch->max_move + 1 ) );
if( is_vampire( ch ) )
ch->max_mana = UMAX( ch->max_mana, ( ch->max_mana + 2 ) );
}
if( stat == STAT_DEX )
{
ch->max_move = UMAX( ch->max_move, ( ch->max_move + 5 ) );
if( is_vampire( ch ) )
ch->max_mana = UMAX( ch->max_mana, ( ch->max_mana + 1 ) );
}
if( stat == STAT_INT && !is_vampire( ch ) )
ch->max_mana = UMAX( ch->max_mana, ( ch->max_mana + 2 ) );
if( stat == STAT_WIS && !is_vampire( ch ) )
ch->max_mana = UMAX( ch->max_mana, ( ch->max_mana + 1 ) );
if( stat == STAT_STR )
ch->max_hit = UMAX( ch->max_hit, ( ch->max_hit + 2 ) );
if( stat == STAT_LCK )
{
if( number_percent( ) > 80 )
ch->max_hit = UMAX( ch->max_hit, ( ch->max_hit + 2 ) );
if( number_percent( ) > 60 )
ch->max_move = UMAX( ch->max_move, ( ch->max_move + 1 ) );
if( number_percent( ) > 50 )
ch->max_mana = UMAX( ch->max_mana, ( ch->max_mana + 1 ) );
}
ch_printf( ch, "You're now up to %d %s.\r\n", ch->perm_stats[stat], stattypes[stat] );
}
CMDF( do_pushup )
{
int moveloss = 10;
switch( ch->substate )
{
default:
if( is_npc( ch ) && IS_AFFECTED( ch, AFF_CHARM ) )
{
send_to_char( "You can't concentrate enough for that.\r\n", ch );
return;
}
if( ch->mount )
{
send_to_char( "You can't do that while mounted.\r\n", ch );
return;
}
if( ch->in_room->sector_type == SECT_AIR )
{
send_to_char( "What? In the air?!\r\n", ch );
return;
}
if( ch->perm_stats[STAT_STR] >= ch->level )
{
send_to_char( "Your already as strong as you can currently get.\r\n", ch );
return;
}
if( ch->move < moveloss )
{
send_to_char( "You are to exhausted to do pushups.\r\n", ch );
return;
}
add_timer( ch, TIMER_DO_FUN, number_range( 2, 4 ), do_pushup, 1 );
act( AT_ACTION, "You begin doing pushups...", ch, NULL, NULL, TO_CHAR );
act( AT_ACTION, "$n begins doing pushups...", ch, NULL, NULL, TO_ROOM );
ch->move -= moveloss;
return;
case 1:
ch->substate = SUB_NONE;
act( AT_ACTION, "You finish doing pushups.", ch, NULL, NULL, TO_CHAR );
act( AT_ACTION, "$n finishes doing pushups.", ch, NULL, NULL, TO_ROOM );
handle_stat( ch, STAT_STR, false );
return;
case SUB_TIMER_DO_ABORT:
ch->substate = SUB_NONE;
act( AT_ACTION, "You stop doing pushups...", ch, NULL, NULL, TO_CHAR );
act( AT_ACTION, "$n stops doing pushups...", ch, NULL, NULL, TO_ROOM );
return;
}
}
CMDF( do_situp )
{
int moveloss = 10;
switch( ch->substate )
{
default:
if( is_npc( ch ) && IS_AFFECTED( ch, AFF_CHARM ) )
{
send_to_char( "You can't concentrate enough for that.\r\n", ch );
return;
}
if( ch->mount )
{
send_to_char( "You can't do that while mounted.\r\n", ch );
return;
}
if( ch->in_room->sector_type == SECT_AIR )
{
send_to_char( "What? In the air?!\r\n", ch );
return;
}
if( ch->perm_stats[STAT_CON] >= ch->level )
{
send_to_char( "Your already at your max constitution for now.\r\n", ch );
return;
}
if( ch->move < moveloss )
{
send_to_char( "You are to exhausted to do situps.\r\n", ch );
return;
}
add_timer( ch, TIMER_DO_FUN, number_range( 2, 4 ), do_situp, 1 );
act( AT_ACTION, "You begin doing situps...", ch, NULL, NULL, TO_CHAR );
act( AT_ACTION, "$n begins doing situps...", ch, NULL, NULL, TO_ROOM );
ch->move -= moveloss;
return;
case 1:
ch->substate = SUB_NONE;
act( AT_ACTION, "You finish doing situps.", ch, NULL, NULL, TO_CHAR );
act( AT_ACTION, "$n finishes doing situps.", ch, NULL, NULL, TO_ROOM );
handle_stat( ch, STAT_CON, false );
return;
case SUB_TIMER_DO_ABORT:
ch->substate = SUB_NONE;
act( AT_ACTION, "You stop doing situps...", ch, NULL, NULL, TO_CHAR );
act( AT_ACTION, "$n stops doing situps...", ch, NULL, NULL, TO_ROOM );
return;
}
}
CMDF( do_gold )
{
ch_printf( ch, "&[gold]You have %s gold pieces.&D\r\n", show_big_nums( ch->mgold, ch->gold ) );
}
CMDF( do_worth )
{
CLAN_DATA *clan;
char *s1, *s2, *person;
if( is_npc( ch ) )
return;
s1 = color_str( AT_SCORE, ch );
s2 = color_str( AT_SCORE2, ch );
person = color_str( AT_PERSON, ch );
if( ch->sex == SEX_MALE )
person = color_str( AT_MALE, ch );
if( ch->sex == SEX_FEMALE )
person = color_str( AT_FEMALE, ch );
clan = ch->pcdata->clan;
pager_printf( ch, "\r\n%sWorth for %s%s%s.\r\n", s1, person, ch->name, ch->pcdata->title );
pager_printf( ch, "%s.~`~.~`~.~`~.~`~.~`~.~`~.~`~.~`~.~`~.~`~.~`~.~`~.~`~.~`~.~`~.~`~.~`~.~`~.~`~.\r\n", s1 );
pager_printf( ch, "%sLevel: %s%-5d %sFavor: %s%-11d %sAlignment: %s%-10d %sExp: %s%-17.f\r\n",
s1, s2, ch->level, s1, s2, !ch->pcdata->deity ? 0 : ch->pcdata->favor, s1, s2, ch->alignment, s1, s2,
ch->exp );
pager_printf( ch, "%sGlory: %s%-5u %sWeight: %s%-10d %sStyle: %s%-14s %sGold: %s%-15s\r\n",
s1, s2, ch->pcdata->quest_curr, s1, s2, ch->carry_weight, s1, s2, style_names[ch->style],
s1, s2, show_big_nums( ch->mgold, ch->gold ) );
pager_printf( ch, "%sDeity: %s%-5.5s %sHitroll: %s%-9d %sDamroll: %s%-12d %s%-6s: %s%-14.14s\r\n",
s1, s2, ( ch->pcdata->deity && ch->pcdata->deity->name ) ? ch->pcdata->deity->name : "-NA-",
s1, s2, get_hitroll( ch ), s1, s2, get_damroll( ch ),
s1, clan ? clan->clan_type == CLAN_PLAIN ? "Clan" : clan->clan_type == CLAN_NATION ? "Nation" : "-NA-" : "-NA-",
s2, ( clan && clan->name ) ? ch->pcdata->clan->name : "-NA-" );
pager_printf( ch, "%s.~`~.~`~.~`~.~`~.~`~.~`~.~`~.~`~.~`~.~`~.~`~.~`~.~`~.~`~.~`~.~`~.~`~.~`~.~`~.\r\n", s1 );
}
/* Affects-at-a-glance, Blodkai */
CMDF( do_affected )
{
AFFECT_DATA *paf;
SKILLTYPE *skill;
int count = 0, col = 0;
bool fby = false;
set_char_color( AT_SCORE, ch );
if( !xIS_EMPTY( ch->affected_by ) || !xIS_EMPTY( ch->resistant )
|| !xIS_EMPTY( ch->immune ) || !xIS_EMPTY( ch->susceptible ) )
send_to_char("&[dgrey]-=&[grey][ &[white] Summary &[white]]&[grey]=-&D\r\n", ch);
if( !xIS_EMPTY( ch->affected_by ) )
ch_printf( ch, " &[blue]Affects: &[lblue]%s&D\r\n", ext_flag_string( &ch->affected_by, a_flags ) );
if( !xIS_EMPTY( ch->resistant ) )
ch_printf( ch, " &[blue]Resistances: &[lblue]%s&D\r\n", ext_flag_string( &ch->resistant, ris_flags ) );
if( !xIS_EMPTY( ch->immune ) )
ch_printf( ch, " &[blue]Immunities: &[lblue]%s&D\r\n", ext_flag_string( &ch->immune, ris_flags ) );
if( !xIS_EMPTY( ch->susceptible ) )
ch_printf( ch, " &[blue]Suscepts: &[lblue]%s&D\r\n", ext_flag_string( &ch->susceptible, ris_flags ) );
if( !str_cmp( argument, "by" ) )
fby = true;
if( ch->first_affect )
{
send_to_char( "\r\n", ch );
for( paf = ch->first_affect; paf; paf = paf->next )
{
if( ( skill = get_skilltype( paf->type ) ) )
{
count++;
if( fby )
{
ch_printf( ch, "&[blue]%2d&[dgrey]> &[blue]%-18.18s ",
count, skill->name );
ch_printf( ch, "&[white]- &[pink]Modifies &[grey]%-14.14s &[blue]",
a_types[paf->location % REVERSE_APPLY] );
if( paf->location >= APPLY_RESISTANT && paf->location <= APPLY_SUSCEPTIBLE )
ch_printf( ch, " to &[yellow]%-14s", ris_flags[paf->modifier] );
else if( paf->location == APPLY_EXT_AFFECT )
{
if( paf->modifier == 0 )
ch_printf( ch, " by &[yellow]%-14s", ext_flag_string(&paf->bitvector, a_flags ) );
else if( paf->modifier > 0 && paf->modifier < AFF_MAX )
ch_printf( ch, " by &[yellow]%-14s", a_flags[paf->modifier] );
else
ch_printf( ch, " by &[yellow]%-14d", paf->modifier );
}
else
ch_printf( ch, " by &[yellow]%-14d", paf->modifier );
ch_printf( ch, " &[blue]for &[red]%5d &[blue]Seconds &D\r\n", paf->duration );
}
else
{
if( col != 0 )
send_to_char( " ", ch );
ch_printf( ch, "&[blue]%18.18s&[grey][&[white]%4d&[grey]]",
skill->name, paf->duration );
if( ++col == 3 )
{
col = 0;
send_to_char( "\r\n", ch );
}
}
}
}
}
if( col != 0 )
send_to_char( "\r\n", ch );
if( count == 0 )
send_to_char( "&[white]No cantrip or skill affects you.&D\r\n\r\n", ch );
else
ch_printf( ch, "&[white]Total of &[red]%d&[white] affects.&D\r\n", count );
if( ch->saving_spell_staff != 0 || ch->saving_para_petri != 0 || ch->saving_wand != 0
|| ch->saving_poison_death != 0 || ch->saving_breath != 0 )
send_to_char( "\r\n&[dgrey]-=&[grey][ &[white]Saves vs Spells &[grey]]&[dgrey]=-&D\r\n\r\n", ch );
if( ch->saving_spell_staff != 0 )
ch_printf(ch, "&[red]* &[grey]Spell Staff &[white]- &[green]%d&D\r\n", ch->saving_spell_staff );
if( ch->saving_para_petri != 0 )
ch_printf(ch, "&[red]* &[grey]Paralysis &[white]- &[green]%d&D\r\n", ch->saving_para_petri );
if( ch->saving_wand != 0 )
ch_printf(ch, "&[red]* &[grey]Wands &[white]- &[green]%d&D\r\n", ch->saving_wand );
if( ch->saving_poison_death != 0 )
ch_printf(ch, "&[red]* &[grey]Petrification &[white]- &[green]%d&D\r\n", ch->saving_poison_death );
if( ch->saving_breath != 0 )
ch_printf(ch, "&[red]* &[grey]Breath &[white]- &[green]%d&D\r\n&D", ch->saving_breath );
}
CMDF( do_inventory )
{
set_char_color( AT_RED, ch );
ch_printf( ch, "You are carrying: Items: %d/%d Weight: %d/%d\r\n",
ch->carry_number, can_carry_n( ch ), ch->carry_weight, can_carry_w( ch ) );
show_list_to_char( ch->first_carrying, ch, true, true );
}
CMDF( do_equipment )
{
OBJ_DATA *obj;
int iWear;
bool found = false;
set_char_color( AT_RED, ch );
send_to_char( "You are using:\r\n", ch );
set_char_color( AT_OBJECT, ch );
for( iWear = 0; iWear < WEAR_MAX; iWear++ )
{
for( obj = ch->first_carrying; obj; obj = obj->next_content )
{
if( obj->wear_loc == iWear )
{
if( ( !is_npc( ch ) ) && ( ch->race > 0 ) && ( ch->race < MAX_PC_RACE )
&& race_table[ch->race] && race_table[ch->race]->where_name[iWear] )
send_to_char( race_table[ch->race]->where_name[iWear], ch );
else
send_to_char( where_name[iWear], ch );
if( can_see_obj( ch, obj ) )
{
send_to_char( format_obj_to_char( obj, ch, true ), ch );
send_to_char( "\r\n", ch );
}
else
send_to_char( "something.\r\n", ch );
found = true;
}
}
}
if( !found )
send_to_char( "Nothing.\r\n", ch );
}
void set_title( CHAR_DATA *ch, char *title )
{
char buf[MSL];
if( is_npc( ch ) )
return;
if( isalpha( title[0] ) || isdigit( title[0] ) )
{
buf[0] = ' ';
mudstrlcpy( buf + 1, title, sizeof( buf ) - 1 );
}
else
mudstrlcpy( buf, title, sizeof( buf ) );
STRSET( ch->pcdata->title, buf );
}
CMDF( do_title )
{
if( is_npc( ch ) )
return;
set_char_color( AT_SCORE, ch );
if( ch->level < 5 )
{
send_to_char( "Sorry... you must be at least level 5 to set your title...\r\n", ch );
return;
}
if( xIS_SET( ch->pcdata->flags, PCFLAG_NOTITLE ) )
{
set_char_color( AT_IMMORT, ch );
send_to_char( "The Gods prohibit you from changing your title.\r\n", ch );
return;
}
if( !argument || argument[0] == '\0' )
{
send_to_char( "Change your title to what?\r\n", ch );
return;
}
if( strlen( argument ) > 50 )
argument[50] = '\0';
set_title( ch, argument );
send_to_char( "Title has been set.\r\n", ch );
}
CMDF( do_homepage )
{
char buf[MSL];
if( is_npc( ch ) )
return;
if( ch->level < 5 )
{
send_to_char( "Sorry... you must be at least level 5 to do that.\r\n", ch );
return;
}
if( !argument || argument[0] == '\0' )
{
char *homepage = ch->pcdata->homepage ? ch->pcdata->homepage : ( char * )"";
ch_printf( ch, "Your homepage is: %s\r\n", show_tilde( homepage ) );
return;
}
if( !str_cmp( argument, "clear" ) )
{
STRFREE( ch->pcdata->homepage );
send_to_char( "Homepage cleared.\r\n", ch );
return;
}
if( strstr( argument, "://" ) )
mudstrlcpy( buf, argument, sizeof( buf ) );
else
snprintf( buf, sizeof( buf ), "http://%s", argument );
if( strlen( buf ) > 70 )
buf[70] = '\0';
hide_tilde( buf );
STRSET( ch->pcdata->homepage, buf );
send_to_char( "Homepage set.\r\n", ch );
}
CMDF( do_email )
{
char buf[MSL];
if( is_npc( ch ) )
return;
if( ch->level < 5 )
{
send_to_char( "Sorry... you must be at least level 5 to do that.\r\n", ch );
return;
}
if( !argument || argument[0] == '\0' )
{
char *email = ch->pcdata->email ? ch->pcdata->email : ( char * )"";
ch_printf( ch, "Your email is: %s\r\n", show_tilde( email ) );
return;
}
if( !str_cmp( argument, "clear" ) )
{
STRFREE( ch->pcdata->email );
send_to_char( "Email cleared.\r\n", ch );
return;
}
mudstrlcpy( buf, argument, sizeof( buf ) );
if( strlen( buf ) > 70 )
buf[70] = '\0';
hide_tilde( buf );
STRSET( ch->pcdata->email, buf );
send_to_char( "Email set.\r\n", ch );
}
CMDF( do_msn )
{
char buf[MSL];
if( is_npc( ch ) )
return;
if( ch->level < 5 )
{
send_to_char( "Sorry... you must be at least level 5 to do that.\r\n", ch );
return;
}
if( !argument || argument[0] == '\0' )
{
char *msn = ch->pcdata->msn ? ch->pcdata->msn : ( char * )"";
ch_printf( ch, "Your msn is: %s\r\n", show_tilde( msn ) );
return;
}
if( !str_cmp( argument, "clear" ) )
{
STRFREE( ch->pcdata->msn );
send_to_char( "Msn cleared.\r\n", ch );
return;
}
mudstrlcpy( buf, argument, sizeof( buf ) );
if( strlen( buf ) > 70 )
buf[70] = '\0';
hide_tilde( buf );
STRSET( ch->pcdata->msn, buf );
send_to_char( "Msn set.\r\n", ch );
}
CMDF( do_yahoo )
{
char buf[MSL];
if( is_npc( ch ) )
return;
if( ch->level < 5 )
{
send_to_char( "Sorry... you must be at least level 5 to do that.\r\n", ch );
return;
}
if( !argument || argument[0] == '\0' )
{
char *yahoo = ch->pcdata->yahoo ? ch->pcdata->yahoo : ( char * )"";
ch_printf( ch, "Your yahoo is: %s\r\n", show_tilde( yahoo ) );
return;
}
if( !str_cmp( argument, "clear" ) )
{
STRFREE( ch->pcdata->yahoo );
send_to_char( "Yahoo cleared.\r\n", ch );
return;
}
mudstrlcpy( buf, argument, sizeof( buf ) );
if( strlen( buf ) > 70 )
buf[70] = '\0';
hide_tilde( buf );
STRSET( ch->pcdata->yahoo, buf );
send_to_char( "Yahoo set.\r\n", ch );
}
CMDF( do_gtalk )
{
char buf[MSL];
if( is_npc( ch ) )
return;
if( ch->level < 5 )
{
send_to_char( "Sorry... you must be at least level 5 to do that.\r\n", ch );
return;
}
if( !argument || argument[0] == '\0' )
{
char *gtalk = ch->pcdata->gtalk ? ch->pcdata->gtalk : ( char * )"";
ch_printf( ch, "Your gtalk is: %s\r\n", show_tilde( gtalk ) );
return;
}
if( !str_cmp( argument, "clear" ) )
{
STRFREE( ch->pcdata->gtalk );
send_to_char( "GTalk cleared.\r\n", ch );
return;
}
mudstrlcpy( buf, argument, sizeof( buf ) );
if( strlen( buf ) > 70 )
buf[70] = '\0';
hide_tilde( buf );
STRSET( ch->pcdata->gtalk, buf );
send_to_char( "GTalk set.\r\n", ch );
}
/* Set your personal description - Thoric */
CMDF( do_description )
{
if( is_npc( ch ) )
{
send_to_char( "Monsters are too dumb to do that!\r\n", ch );
return;
}
if( !ch->desc )
{
bug( "%s: no descriptor", __FUNCTION__ );
return;
}
switch( ch->substate )
{
default:
bug( "%s: illegal substate", __FUNCTION__ );
return;
case SUB_RESTRICTED:
send_to_char( "You can't use this command from within another command.\r\n", ch );
return;
case SUB_NONE:
ch->substate = SUB_PERSONAL_DESC;
ch->dest_buf = ch;
start_editing( ch, ch->description );
return;
case SUB_PERSONAL_DESC:
STRFREE( ch->description );
ch->description = copy_buffer( ch );
stop_editing( ch );
return;
}
}
/* Ripped off do_description for whois bio's -- Scryn*/
CMDF( do_bio )
{
if( is_npc( ch ) )
{
send_to_char( "Mobs can't set a bio.\r\n", ch );
return;
}
if( ch->level < 5 )
{
set_char_color( AT_SCORE, ch );
send_to_char( "You must be at least level five to write your bio...\r\n", ch );
return;
}
if( !ch->desc )
{
bug( "%s: no descriptor", __FUNCTION__ );
return;
}
switch( ch->substate )
{
default:
bug( "%s: illegal substate", __FUNCTION__ );
return;
case SUB_RESTRICTED:
send_to_char( "You can't use this command from within another command.\r\n", ch );
return;
case SUB_NONE:
ch->substate = SUB_PERSONAL_BIO;
ch->dest_buf = ch;
start_editing( ch, ch->pcdata->bio );
return;
case SUB_PERSONAL_BIO:
STRFREE( ch->pcdata->bio );
ch->pcdata->bio = copy_buffer( ch );
stop_editing( ch );
return;
}
}
CMDF( do_score )
{
int stat;
char *s1, *s2;
if( is_npc( ch ) )
return;
s1 = color_str( AT_SCORE, ch );
s2 = color_str( AT_SCORE2, ch );
set_pager_color( AT_SCORE, ch );
pager_printf( ch, "\r\n%sScore for %s%s%s.\r\n", s1,
ch->sex == SEX_MALE ? color_str( AT_MALE, ch ) : ch->sex == SEX_FEMALE ? color_str( AT_FEMALE, ch ) : "",
ch->name, ( !is_npc( ch ) && ch->pcdata->title ) ? ch->pcdata->title : "" );
if( get_trust( ch ) >= PERM_IMM )
pager_printf( ch, "%sYou are a trusted %s%s.\r\n", s1, s2, perms_flag[get_trust( ch )] );
if( ch->pcdata->spouse )
pager_printf( ch, "%sYou are married to %s%s.\r\n", s1, s2, ch->pcdata->spouse );
set_pager_color( AT_SCORE, ch );
if( !is_npc( ch ) && ch->pcdata->condition[COND_DRUNK] > 10 )
send_to_pager( "You are drunk.\r\n", ch );
if( !is_npc( ch ) && ch->pcdata->condition[COND_THIRST] == 0 )
send_to_pager( "You are in danger of dehydrating.\r\n", ch );
if( !is_npc( ch ) && ch->pcdata->condition[COND_FULL] == 0 )
send_to_pager( "You are starving to death.\r\n", ch );
if( ch->position != POS_SLEEPING )
{
switch( ch->mental_state / 10 )
{
default:
send_to_pager( "You're completely messed up!\r\n", ch );
break;
case -10:
send_to_pager( "You're barely conscious.\r\n", ch );
break;
case -9:
send_to_pager( "You can barely keep your eyes open.\r\n", ch );
break;
case -8:
send_to_pager( "You're extremely drowsy.\r\n", ch );
break;
case -7:
send_to_pager( "You feel very unmotivated.\r\n", ch );
break;
case -6:
send_to_pager( "You feel sedated.\r\n", ch );
break;
case -5:
send_to_pager( "You feel sleepy.\r\n", ch );
break;
case -4:
send_to_pager( "You feel tired.\r\n", ch );
break;
case -3:
send_to_pager( "You could use a rest.\r\n", ch );
break;
case -2:
send_to_pager( "You feel a little under the weather.\r\n", ch );
break;
case -1:
send_to_pager( "You feel fine.\r\n", ch );
break;
case 0:
send_to_pager( "You feel great.\r\n", ch );
break;
case 1:
send_to_pager( "You feel energetic.\r\n", ch );
break;
case 2:
send_to_pager( "Your mind is racing.\r\n", ch );
break;
case 3:
send_to_pager( "You can't think straight.\r\n", ch );
break;
case 4:
send_to_pager( "Your mind is going 100 miles an hour.\r\n", ch );
break;
case 5:
send_to_pager( "You're high as a kite.\r\n", ch );
break;
case 6:
send_to_pager( "Your mind and body are slipping apart.\r\n", ch );
break;
case 7:
send_to_pager( "Reality is slipping away.\r\n", ch );
break;
case 8:
send_to_pager( "You have no idea what is real, and what is not.\r\n", ch );
break;
case 9:
send_to_pager( "You feel immortal.\r\n", ch );
break;
case 10:
send_to_pager( "You are a Supreme Entity.\r\n", ch );
break;
}
}
else if( ch->mental_state > 45 )
send_to_pager( "Your sleep is filled with strange and vivid dreams.\r\n", ch );
else if( ch->mental_state > 25 )
send_to_pager( "Your sleep is uneasy.\r\n", ch );
else if( ch->mental_state < -35 )
send_to_pager( "You are deep in a much needed sleep.\r\n", ch );
else if( ch->mental_state < -25 )
send_to_pager( "You are in deep slumber.\r\n", ch );
if( ch->pcdata->bestowments )
pager_printf( ch, "%sYou are bestowed with the command(s): %s%s.\r\n", s1, s2, ch->pcdata->bestowments );
if( ch->pcdata->birth_year )
pager_printf( ch, "%s%s\r\n", s2, show_birthday( ch ) );
pager_printf( ch, "%s-----------------------------%sCharacter Data%s---------------------------------\r\n", s1, s2, s1 );
pager_printf( ch, "%sLevel: %s%-13d %sRace: %s%-13.13s %sPlayed: %s%d %shours\r\n",
s1, s2, ch->level, s1, s2, capitalize( dis_race_name( ch->race ) ), s1, s2, get_played( ch ), s1 );
pager_printf( ch, "%sAge: %s%-13d %sClass: %s%-13.13s %sLog In: %s%s\r\n",
s1, s2, get_age( ch ), s1, s2, capitalize( dis_class_name( ch->Class ) ), s1, s2, distime( ch->logon ) );
for( stat = 0; stat < STAT_MAX; stat++ )
{
pager_printf( ch, "%s%3.3s: %s%-13d", s1, capitalize( stattypes[stat] ), s2, get_perm_stat( stat, ch ) );
if( stat == 0 )
pager_printf( ch, " %sHR: %s%-13d %sSaved: %s%s\r\n",
s1, s2, get_hitroll( ch ), s1, s2, ch->save_time ? distime( ch->save_time ) : "no save this session" );
else if( stat == 1 )
pager_printf( ch, " %sDR: %s%-13d %sTime: %s%s\r\n",
s1, s2, get_damroll( ch ), s1, s2, distime( current_time ) );
else if( stat == 2 )
pager_printf( ch, " %sArmor: %s%-13d\r\n", s1, s2, get_ac( ch ) );
else if( stat == 3 )
pager_printf( ch, " %sAlign: %s%+-13d %sItems: %s%d %s(max %s%d%s)\r\n",
s1, s2, ch->alignment, s1, s2, ch->carry_number, s1, s2, can_carry_n( ch ), s1 );
else if( stat == 4 )
pager_printf( ch, " %sWimpy: %s%-13d %sWeight: %s%d %s(max %s%d%s)\r\n",
s1, s2, ch->wimpy, s1, s2, ch->carry_weight, s1, s2, can_carry_w( ch ), s1 );
else if( stat == 5 )
pager_printf( ch, " %sGlory: %s%u\r\n", s1, s2, ch->pcdata->quest_curr );
else if( stat == 6 )
pager_printf( ch, " %sPract: %s%d\r\n", s1, s2, ch->practice );
}
pager_printf( ch, "%sPos'n: %s%-13s ", s1, s2, pos_names[ch->position] );
pager_printf( ch, "%sHP: %s%d %sof %s%d\r\n", s1, s2, ch->hit, s1, s2, ch->max_hit );
pager_printf( ch, "%sStyle: %s%-13s %s", s1, s2, style_names[ch->style], s1 );
if( is_vampire( ch ) )
send_to_pager( "Blood: ", ch );
else
send_to_pager( "Mana: ", ch );
pager_printf( ch, "%s%d %sof %s%d\r\n", s2, ch->mana, s1, s2, ch->max_mana );
pager_printf( ch, "%sGold: %s%-13s %sMove: %s%d %sof %s%d\r\n",
s1, s2, show_big_nums( ch->mgold, ch->gold ), s1, s2, ch->move, s1, s2, ch->max_move );
pager_printf( ch, "%sExp: %s%-13.f\r\n", s1, s2, ch->exp );
if( ch->morph && ch->morph->morph )
{
pager_printf( ch, "%s-------------------------------%sMorph Data%s-----------------------------------\r\n", s1, s2, s1 );
if( is_immortal( ch ) )
pager_printf( ch, "%sMorphed as (%s%d%s) %s%s %swith a timer of %s%d.\r\n",
s1, s2, ch->morph->morph->vnum, s1, s2, ch->morph->morph->short_desc, s1, s2, ch->morph->timer );
else
pager_printf( ch, "%sYou are morphed into a %s%s.\r\n", s1, s2, ch->morph->morph->short_desc );
}
if( ch->pcdata->mkills || ch->pcdata->mdeaths || ch->pcdata->pkills || ch->pcdata->pdeaths )
{
pager_printf( ch, "%s--------------------------------%sKill Data%s-----------------------------------\r\n", s1, s2, s1 );
if( ch->pcdata->mkills )
pager_printf( ch, "%sMKills: %s%u", s1, s2, ch->pcdata->mkills );
if( ch->pcdata->mdeaths )
pager_printf( ch, "%s%sMDeaths: %s%u", s1, ch->pcdata->mkills ? " " : "", s2, ch->pcdata->mdeaths );
if( ch->pcdata->pkills )
pager_printf( ch, "%s%sPKills: %s%u", s1, ( ch->pcdata->mkills || ch->pcdata->mdeaths ) ? " " : "",
s2, ch->pcdata->pkills );
if( ch->pcdata->pdeaths )
pager_printf( ch, "%s%sPDeaths: %s%u",
s1, ( ch->pcdata->mkills || ch->pcdata->mdeaths || ch->pcdata->pkills ) ? " " : "",
s2, ch->pcdata->pdeaths );
send_to_pager( "\r\n", ch );
}
if( ch->pcdata->deity )
{
pager_printf( ch, "%s----------------------------------%sDeity%s-------------------------------------\r\n", s1, s2, s1 );
pager_printf( ch, "%s%-15.15s %sFavor: %s%d\r\n", s2, ch->pcdata->deity->name, s1, s2, ch->pcdata->favor );
}
if( ch->pcdata->clan )
{
CLAN_DATA *clan = ch->pcdata->clan;
pager_printf( ch, "%s-----------------------------------%sClan%s-------------------------------------\r\n", s1, s2, s1 );
pager_printf( ch, "%s%-15.15s %sMembers: %s%d\r\n", s2, clan->name, s1, s2, clan->members );
}
if( ch->pcdata->nation )
{
CLAN_DATA *nation = ch->pcdata->nation;
pager_printf( ch, "%s----------------------------------%sNation%s------------------------------------\r\n", s1, s2, s1 );
pager_printf( ch, "%s%-15.15s %sMembers: %s%d\r\n", s2, nation->name, s1, s2, nation->members );
}
if( is_immortal( ch ) )
{
pager_printf( ch, "%s------------------------------%sImmortal Data%s---------------------------------\r\n", s1, s2, s1 );
pager_printf( ch, "%sWizinvis [%s%s%s] Wizlevel (%s%d%s)\r\n",
s1, s2, xIS_SET( ch->act, PLR_WIZINVIS ) ? "X" : " ", s1, s2, ch->pcdata->wizinvis, s1 );
pager_printf( ch, "%sBamfin: %s%s %s\r\n", s1, s2, ch->name,
ch->pcdata->bamfin ? ch->pcdata->bamfin : "appears in a swirling mist." );
pager_printf( ch, "%sBamfout: %s%s %s\r\n", s1, s2, ch->name,
ch->pcdata->bamfout ? ch->pcdata->bamfout : "leaves in a swirling mist." );
if( ch->pcdata->area )
{
pager_printf( ch, "%sVnums: (%s%-5.5d %s- %s%-5.5d%s)\r\n",
s1, s2, ch->pcdata->area->low_vnum, s1, s2, ch->pcdata->area->hi_vnum, s1 );
pager_printf( ch, "%sArea Loaded [%s%s%s]\r\n",
s1, s2, ( IS_SET( ch->pcdata->area->status, AREA_LOADED ) ) ? "yes" : "no", s1 );
}
}
send_to_pager( "\r\n", ch );
}
void do_stat( CHAR_DATA *ch, char *argument )
{
int stat, col = 0;
if( is_npc( ch ) )
{
send_to_char( "Huh?\r\n", ch );
return;
}
ch_printf( ch, "You report: %d/%d hp %d/%d %s %d/%d mv %.f xp.\r\n",
ch->hit, ch->max_hit, ch->mana, ch->max_mana, is_vampire( ch ) ? "blood" : "mana", ch->move, ch->max_move, ch->exp );
send_to_char( "Stats: ", ch );
for( stat = 0; stat < STAT_MAX; stat++ )
{
ch_printf( ch, "%3.3s(%d)", capitalize( stattypes[stat] ), get_perm_stat( stat, ch ) );
if( ++col == 7 )
{
col = 0;
send_to_char( "\r\n", ch );
}
else
send_to_char( " ", ch );
}
if( col != 0 )
send_to_char( "\r\n", ch );
}
CMDF( do_statreport )
{
char buf[MSL];
int stat, col = 0;
if( is_npc( ch ) )
{
send_to_char( "Huh?\r\n", ch );
return;
}
do_stat( ch, "" );
snprintf( buf, sizeof( buf ), "$n reports: %d/%d hp %d/%d %s %d/%d mv %.f xp.",
ch->hit, ch->max_hit, ch->mana, ch->max_mana, is_vampire( ch ) ? "blood" : "mana", ch->move, ch->max_move, ch->exp );
act( AT_REPORT, buf, ch, NULL, NULL, TO_ROOM );
snprintf( buf, sizeof( buf ), "%s", "$n's Stats: " );
for( stat = 0; stat < STAT_MAX; stat++ )
{
snprintf( buf + strlen( buf ), sizeof( buf ) - strlen( buf ), "%3.3s(%d)", capitalize( stattypes[stat] ), get_perm_stat( stat, ch ) );
if( ++col == 7 )
{
col = 0;
mudstrlcat( buf, "\r\n", sizeof( buf ) );
}
else
mudstrlcat( buf, " ", sizeof( buf ) );
}
if( col != 0 )
mudstrlcat( buf, "\r\n", sizeof( buf ) );
act( AT_REPORT, buf, ch, NULL, NULL, TO_ROOM );
}
CMDF( do_report )
{
char buf[MIL];
if( is_npc( ch ) && ch->fighting )
return;
ch_printf( ch, "You report: %d/%d hp %d/%d %s %d/%d mv %.f xp.\r\n",
ch->hit, ch->max_hit, ch->mana, ch->max_mana, is_vampire( ch ) ? "blood" : "mana",
ch->move, ch->max_move, ch->exp );
snprintf( buf, sizeof( buf ), "$n reports: %d/%d hp %d/%d %s %d/%d mv %.f xp.\r\n",
ch->hit, ch->max_hit, ch->mana, ch->max_mana, is_vampire( ch ) ? "blood" : "mana",
ch->move, ch->max_move, ch->exp );
act( AT_REPORT, buf, ch, NULL, NULL, TO_ROOM );
}
CMDF( do_fprompt )
{
char arg[MIL];
set_char_color( AT_GREY, ch );
if( is_npc( ch ) )
{
send_to_char( "NPC's can't change their prompt..\r\n", ch );
return;
}
one_argument( argument, arg );
if( !*arg || !str_cmp( arg, "display" ) )
{
send_to_char( "Your current fighting prompt string:\r\n", ch );
set_char_color( AT_WHITE, ch );
ch_printf( ch, "%s\r\n", !ch->pcdata->fprompt ? "(default prompt)" : ch->pcdata->fprompt );
set_char_color( AT_GREY, ch );
send_to_char( "Type 'help prompt' for information on changing your prompt.\r\n", ch );
return;
}
send_to_char( "Replacing old prompt of:\r\n", ch );
set_char_color( AT_WHITE, ch );
ch_printf( ch, "%s\r\n", !ch->pcdata->fprompt ? "(default prompt)" : ch->pcdata->fprompt );
STRFREE( ch->pcdata->fprompt );
if( strlen( argument ) > 128 )
argument[128] = '\0';
if( str_cmp( arg, "default" ) )
ch->pcdata->fprompt = STRALLOC( argument );
}
CMDF( do_prompt )
{
char arg[MIL];
set_char_color( AT_GREY, ch );
if( is_npc( ch ) )
{
send_to_char( "NPC's can't change their prompt..\r\n", ch );
return;
}
one_argument( argument, arg );
if( !*arg || !str_cmp( arg, "display" ) )
{
send_to_char( "Your current prompt string:\r\n", ch );
set_char_color( AT_WHITE, ch );
ch_printf( ch, "%s\r\n", !ch->pcdata->prompt ? "(default prompt)" : ch->pcdata->prompt );
set_char_color( AT_GREY, ch );
send_to_char( "Type 'help prompt' for information on changing your prompt.\r\n", ch );
return;
}
send_to_char( "Replacing old prompt of:\r\n", ch );
set_char_color( AT_WHITE, ch );
ch_printf( ch, "%s\r\n", !ch->pcdata->prompt ? "(default prompt)" : ch->pcdata->prompt );
STRFREE( ch->pcdata->prompt );
if( strlen( argument ) > 128 )
argument[128] = '\0';
if( str_cmp( arg, "default" ) )
ch->pcdata->prompt = STRALLOC( argument );
}