📄 act_info.c
字号:
send_to_char( buf, ch );
return;
}
void do_inventory( CHAR_DATA *ch, char *argument )
{
send_to_char( "You are carrying:\n\r", ch );
show_list_to_char( ch->carrying, ch, TRUE, TRUE );
return;
}
void do_equipment( CHAR_DATA *ch, char *argument )
{
OBJ_DATA *obj;
int iWear;
bool found;
send_to_char( "You are using:\n\r", ch );
found = FALSE;
for ( iWear = 0; iWear < MAX_WEAR; iWear++ )
{
if ( ( obj = get_eq_char( ch, iWear ) ) == NULL )
continue;
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( "\n\r", ch );
}
else
{
send_to_char( "something.\n\r", ch );
}
found = TRUE;
}
if ( !found )
send_to_char( "Nothing.\n\r", ch );
return;
}
void do_compare( CHAR_DATA *ch, char *argument )
{
char arg1[MAX_INPUT_LENGTH];
char arg2[MAX_INPUT_LENGTH];
OBJ_DATA *obj1;
OBJ_DATA *obj2;
int value1;
int value2;
char *msg;
argument = one_argument( argument, arg1 );
argument = one_argument( argument, arg2 );
if ( arg1[0] == '\0' )
{
send_to_char( "Compare what to what?\n\r", ch );
return;
}
if ( ( obj1 = get_obj_carry( ch, arg1 ) ) == NULL )
{
send_to_char( "You do not have that item.\n\r", ch );
return;
}
if ( arg2[0] == '\0' )
{
for ( obj2 = ch->carrying; obj2 != NULL; obj2 = obj2->next_content )
{
if ( obj2->wear_loc != WEAR_NONE
&& can_see_obj( ch, obj2 )
&& obj1->item_type == obj2->item_type
&& ( obj1->wear_flags & obj2->wear_flags & ~ITEM_TAKE) != 0 )
break;
}
if ( obj2 == NULL )
{
send_to_char( "You aren't wearing anything comparable.\n\r", ch );
return;
}
}
else
{
if ( ( obj2 = get_obj_carry( ch, arg2 ) ) == NULL )
{
send_to_char( "You do not have that item.\n\r", ch );
return;
}
}
msg = NULL;
value1 = 0;
value2 = 0;
if ( obj1 == obj2 )
{
msg = "You compare $p to itself. It looks about the same.";
}
else if ( obj1->item_type != obj2->item_type )
{
msg = "You can't compare $p and $P.";
}
else
{
switch ( obj1->item_type )
{
default:
msg = "You can't compare $p and $P.";
break;
case ITEM_ARMOR:
value1 = obj1->value[0];
value2 = obj2->value[0];
break;
case ITEM_WEAPON:
value1 = obj1->value[1] + obj1->value[2];
value2 = obj2->value[1] + obj2->value[2];
break;
}
}
if ( msg == NULL )
{
if ( value1 == value2 ) msg = "$p and $P look about the same.";
else if ( value1 > value2 ) msg = "$p looks better than $P.";
else msg = "$p looks worse than $P.";
}
act( msg, ch, obj1, obj2, TO_CHAR );
return;
}
void do_credits( CHAR_DATA *ch, char *argument )
{
do_help( ch, "diku" );
return;
}
void do_where( CHAR_DATA *ch, char *argument )
{
char buf[MAX_STRING_LENGTH];
char arg[MAX_INPUT_LENGTH];
CHAR_DATA *victim;
DESCRIPTOR_DATA *d;
bool found;
one_argument( argument, arg );
if ( arg[0] == '\0' )
{
send_to_char( "Players near you:\n\r", ch );
found = FALSE;
for ( d = descriptor_list; d; d = d->next )
{
if ( d->connected == CON_PLAYING
&& ( victim = d->character ) != NULL
&& !IS_NPC(victim)
&& victim->in_room != NULL
&& victim->in_room->area == ch->in_room->area
&& can_see( ch, victim ) )
{
found = TRUE;
sprintf( buf, "%-28s %s\n\r",
victim->name, victim->in_room->name );
send_to_char( buf, ch );
}
}
if ( !found )
send_to_char( "None\n\r", ch );
}
else
{
found = FALSE;
for ( victim = char_list; victim != NULL; victim = victim->next )
{
if ( victim->in_room != NULL
&& victim->in_room->area == ch->in_room->area
&& !IS_AFFECTED(victim, AFF_HIDE)
&& !IS_AFFECTED(victim, AFF_SNEAK)
&& can_see( ch, victim )
&& is_name( arg, victim->name ) )
{
found = TRUE;
sprintf( buf, "%-28s %s\n\r",
PERS(victim, ch), victim->in_room->name );
send_to_char( buf, ch );
break;
}
}
if ( !found )
act( "You didn't find any $T.", ch, NULL, arg, TO_CHAR );
}
return;
}
void do_consider( CHAR_DATA *ch, char *argument )
{
char arg[MAX_INPUT_LENGTH];
CHAR_DATA *victim;
char *msg = '\0';
char *buf = '\0';
int diff;
int hpdiff;
one_argument( argument, arg );
if ( arg[0] == '\0' )
{
send_to_char( "Consider killing whom?\n\r", ch );
return;
}
if ( ( victim = get_char_room( ch, arg ) ) == NULL )
{
send_to_char( "They're not here.\n\r", ch );
return;
}
if ( !IS_NPC( victim ) )
{
send_to_char( "The gods do not accept this type of sacrafice.\n\r",
ch );
return;
}
diff = victim->level - ch->level;
if ( diff <= -10 ) msg = "You can kill $N naked and weaponless.";
else if ( diff <= -5 ) msg = "$N is no match for you.";
else if ( diff <= -2 ) msg = "$N looks like an easy kill.";
else if ( diff <= 1 ) msg = "The perfect match!";
else if ( diff <= 4 ) msg = "$N says 'Do you feel lucky, punk?'.";
else if ( diff <= 9 ) msg = "$N laughs at you mercilessly.";
else msg = "Death will thank you for your gift.";
act( msg, ch, NULL, victim, TO_CHAR );
/* additions by king@tinuviel.cs.wcu.edu */
hpdiff = ( ch->hit - victim->hit );
if ( ( ( diff >= 0) && ( hpdiff <= 0 ) )
|| ( ( diff <= 0 ) && ( hpdiff >= 0 ) ) )
{
send_to_char( "Also,", ch );
}
else
{
send_to_char( "However,", ch );
}
if ( hpdiff >= 101 )
buf = " you are currently much healthier than $E.";
if ( hpdiff <= 100 )
buf = " you are currently healthier than $E.";
if ( hpdiff <= 50 )
buf = " you are currently slightly healthier than $E.";
if ( hpdiff <= 25 )
buf = " you are a teensy bit healthier than $E.";
if ( hpdiff <= 0 )
buf = " $E is a teensy bit healthier than you.";
if ( hpdiff <= -25 )
buf = " $E is slightly healthier than you.";
if ( hpdiff <= -50 )
buf = " $E is healthier than you.";
if ( hpdiff <= -100 )
buf = " $E is much healthier than you.";
act( buf, ch, NULL, victim, TO_CHAR );
return;
}
void set_title( CHAR_DATA *ch, char *title )
{
char buf[MAX_STRING_LENGTH];
if ( IS_NPC(ch) )
{
bug( "Set_title: NPC.", 0 );
return;
}
if ( isalpha(title[0]) || isdigit(title[0]) )
{
buf[0] = ' ';
strcpy( buf+1, title );
}
else
{
strcpy( buf, title );
}
free_string( ch->pcdata->title );
ch->pcdata->title = str_dup( buf );
return;
}
void do_title( CHAR_DATA *ch, char *argument )
{
if ( IS_NPC(ch) )
return;
if ( argument[0] == '\0' )
{
send_to_char( "Change your title to what?\n\r", ch );
return;
}
if ( strlen(argument) > 50 )
argument[50] = '\0';
smash_tilde( argument );
set_title( ch, argument );
send_to_char( "Ok.\n\r", ch );
}
void do_description( CHAR_DATA *ch, char *argument )
{
char buf[MAX_STRING_LENGTH];
if ( argument[0] != '\0' )
{
buf[0] = '\0';
smash_tilde( argument );
if ( argument[0] == '+' )
{
if ( ch->description != NULL )
strcat( buf, ch->description );
argument++;
while ( isspace(*argument) )
argument++;
}
if ( strlen(buf) + strlen(argument) >= MAX_STRING_LENGTH - 2 )
{
send_to_char( "Description too long.\n\r", ch );
return;
}
strcat( buf, argument );
strcat( buf, "\n\r" );
free_string( ch->description );
ch->description = str_dup( buf );
}
send_to_char( "Your description is:\n\r", ch );
send_to_char( ch->description ? ch->description : "(None).\n\r", ch );
return;
}
void do_report( CHAR_DATA *ch, char *argument )
{
char buf[MAX_INPUT_LENGTH];
sprintf( buf,
"You report: %d/%d hp %d/%d mana %d/%d mv %d xp.\n\r",
ch->hit, ch->max_hit,
ch->mana, ch->max_mana,
ch->move, ch->max_move,
ch->exp );
send_to_char( buf, ch );
sprintf( buf, "$n reports: %d/%d hp %d/%d mana %d/%d mv %d xp.",
ch->hit, ch->max_hit,
ch->mana, ch->max_mana,
ch->move, ch->max_move,
ch->exp );
act( buf, ch, NULL, NULL, TO_ROOM );
return;
}
void do_practice( CHAR_DATA *ch, char *argument )
{
char buf[MAX_STRING_LENGTH];
char buf1[MAX_STRING_LENGTH*2];
int sn;
if ( IS_NPC(ch) )
return;
buf1[0] = '\0';
if ( ch->level < 3 )
{
send_to_char(
"You must be third level to practice. Go train instead!\n\r",
ch );
return;
}
if ( argument[0] == '\0' )
{
int col;
col = 0;
for ( sn = 0; sn < MAX_SKILL; sn++ )
{
if ( skill_table[sn].name == NULL )
break;
if ( ch->level < skill_table[sn].skill_level[ch->class] )
continue;
sprintf( buf, "%18s %3d%% ",
skill_table[sn].name, ch->pcdata->learned[sn] );
strcat( buf1, buf );
if ( ++col % 3 == 0 )
strcat( buf1, "\n\r" );
}
if ( col % 3 != 0 )
strcat( buf1, "\n\r" );
sprintf( buf, "You have %d practice sessions left.\n\r",
ch->practice );
strcat( buf1, buf );
send_to_char( buf1, ch );
}
else
{
CHAR_DATA *mob;
int adept;
if ( !IS_AWAKE(ch) )
{
send_to_char( "In your dreams, or what?\n\r", ch );
return;
}
for ( mob = ch->in_room->people; mob != NULL; mob = mob->next_in_room )
{
if ( IS_NPC(mob) && IS_SET(mob->act, ACT_PRACTICE) )
break;
}
if ( mob == NULL )
{
send_to_char( "You can't do that here.\n\r", ch );
return;
}
if ( ch->practice <= 0 )
{
send_to_char( "You have no practice sessions left.\n\r", ch );
return;
}
if ( ( sn = skill_lookup( argument ) ) < 0
|| ( !IS_NPC(ch)
&& ch->level < skill_table[sn].skill_level[ch->class] ) )
{
send_to_char( "You can't practice that.\n\r", ch );
return;
}
adept = IS_NPC(ch) ? 100 : class_table[ch->class].skill_adept;
if ( ch->pcdata->learned[sn] >= adept )
{
sprintf( buf, "You are already an adept of %s.\n\r",
skill_table[sn].name );
send_to_char( buf, ch );
}
else
{
ch->practice--;
ch->pcdata->learned[sn] += int_app[get_curr_int(ch)].learn;
if ( ch->pcdata->learned[sn] < adept )
{
act( "You practice $T.",
ch, NULL, skill_table[sn].name, TO_CHAR );
act( "$n practices $T.",
ch, NULL, skill_table[sn].name, TO_ROOM );
}
else
{
ch->pcdata->learned[sn] = adept;
act( "You are now an adept of $T.",
ch, NULL, skill_table[sn].name, TO_CHAR );
act( "$n is now an adept of $T.",
ch, NULL, skill_table[sn].name, TO_ROOM );
}
}
}
return;
}
/*
* 'Wimpy' originally by Dionysos.
*/
void do_wimpy( CHAR_DATA *ch, char *argument )
{
char buf[MAX_STRING_LENGTH];
char arg[MAX_INPUT_LENGTH];
int wimpy;
one_argument( argument, arg );
if ( arg[0] == '\0' )
wimpy = ch->max_hit / 5;
else
wimpy = atoi( arg );
if ( wimpy < 0 )
{
send_to_char( "Your courage exceeds your wisdom.\n\r", ch );
return;
}
if ( wimpy > ch->max_hit )
{
send_to_char( "Such cowardice ill becomes you.\n\r", ch );
return;
}
ch->wimpy = wimpy;
sprintf( buf, "Wimpy set to %d hit points.\n\r", wimpy );
send_to_char( buf, ch );
return;
}
void do_password( CHAR_DATA *ch, char *argument )
{
char arg1[MAX_INPUT_LENGTH];
char arg2[MAX_INPUT_LENGTH];
char *pArg;
char *pwdnew;
char *p;
char cEnd;
if ( IS_NPC(ch) )
return;
/*
* Can't use one_argument here because it smashes case.
* So we just steal all its code. Bleagh.
*/
pArg = arg1;
while ( isspace(*argument) )
argument++;
cEnd = ' ';
if ( *argument == '\'' || *argument == '"' )
cEnd = *argument++;
while ( *argument != '\0' )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -