📄 act_wiz.c
字号:
}
sprintf( buf, "Name: %s.\n\r",
obj->name );
strcat( buf1, buf );
sprintf( buf, "Vnum: %d. Type: %s.\n\r",
obj->pIndexData->vnum, item_type_name( obj ) );
strcat( buf1, buf );
sprintf( buf, "Short description: %s.\n\rLong description: %s\n\r",
obj->short_descr, obj->description );
strcat( buf1, buf );
sprintf( buf, "Wear bits: %d. Extra bits: %s.\n\r",
obj->wear_flags, extra_bit_name( obj->extra_flags ) );
strcat( buf1, buf );
sprintf( buf, "Number: %d/%d. Weight: %d/%d.\n\r",
1, get_obj_number( obj ),
obj->weight, get_obj_weight( obj ) );
strcat( buf1, buf );
sprintf( buf, "Cost: %d. Timer: %d. Level: %d.\n\r",
obj->cost, obj->timer, obj->level );
strcat( buf1, buf );
sprintf( buf,
"In room: %d. In object: %s. Carried by: %s. Wear_loc: %d.\n\r",
obj->in_room == NULL ? 0 : obj->in_room->vnum,
obj->in_obj == NULL ? "(none)" : obj->in_obj->short_descr,
obj->carried_by == NULL ? "(none)" : obj->carried_by->name,
obj->wear_loc );
strcat( buf1, buf );
sprintf( buf, "Values: %d %d %d %d.\n\r",
obj->value[0], obj->value[1], obj->value[2], obj->value[3] );
strcat( buf1, buf );
if ( obj->extra_descr != NULL || obj->pIndexData->extra_descr != NULL )
{
EXTRA_DESCR_DATA *ed;
strcat( buf1, "Extra description keywords: '" );
for ( ed = obj->extra_descr; ed != NULL; ed = ed->next )
{
strcat( buf1, ed->keyword );
if ( ed->next != NULL )
strcat( buf1, " " );
}
for ( ed = obj->pIndexData->extra_descr; ed != NULL; ed = ed->next )
{
strcat( buf1, ed->keyword );
if ( ed->next != NULL )
strcat( buf1, " " );
}
strcat( buf1, "'.\n\r" );
}
for ( paf = obj->affected; paf != NULL; paf = paf->next )
{
sprintf( buf, "Affects %s by %d.\n\r",
affect_loc_name( paf->location ), paf->modifier );
strcat( buf1, buf );
}
for ( paf = obj->pIndexData->affected; paf != NULL; paf = paf->next )
{
sprintf( buf, "Affects %s by %d.\n\r",
affect_loc_name( paf->location ), paf->modifier );
strcat( buf1, buf );
}
send_to_char( buf1, ch );
return;
}
/*
* Return ascii name of an act bit vector.
*/
char *act_bit_name( int vector )
{
static char buf[512];
buf[0] = '\0';
if ( vector & ACT_IS_NPC ) strcat( buf, " npc" );
if ( vector & ACT_SENTINEL ) strcat( buf, " sentinel" );
if ( vector & ACT_SCAVENGER ) strcat( buf, " scavenger" );
if ( vector & ACT_AGGRESSIVE ) strcat( buf, " aggressive" );
if ( vector & ACT_STAY_AREA ) strcat( buf, " stay-area" );
if ( vector & ACT_WIMPY ) strcat( buf, " wimpy" );
if ( vector & ACT_PET ) strcat( buf, " pet" );
if ( vector & ACT_TRAIN ) strcat( buf, " train" );
if ( vector & ACT_PRACTICE ) strcat( buf, " practice" );
return buf+1;
}
void do_mstat( CHAR_DATA *ch, char *argument )
{
char buf[MAX_STRING_LENGTH];
char buf1[MAX_STRING_LENGTH];
char arg[MAX_INPUT_LENGTH];
AFFECT_DATA *paf;
CHAR_DATA *victim;
one_argument( argument, arg );
if ( arg[0] == '\0' )
{
send_to_char( "Mstat whom?\n\r", ch );
return;
}
if ( ( victim = get_char_world( ch, arg ) ) == NULL )
{
send_to_char( "They aren't here.\n\r", ch );
return;
}
buf1[0] = '\0';
sprintf( buf, "Name: %s.\n\r",
victim->name );
strcat( buf1, buf );
sprintf( buf, "Vnum: %d. Sex: %s. Room: %d.\n\r",
IS_NPC(victim) ? victim->pIndexData->vnum : 0,
victim->sex == SEX_MALE ? "male" :
victim->sex == SEX_FEMALE ? "female" : "neutral",
victim->in_room == NULL ? 0 : victim->in_room->vnum
);
strcat( buf1, buf );
sprintf( buf, "Str: %d. Int: %d. Wis: %d. Dex: %d. Con: %d.\n\r",
get_curr_str(victim),
get_curr_int(victim),
get_curr_wis(victim),
get_curr_dex(victim),
get_curr_con(victim) );
strcat( buf1, buf );
sprintf( buf, "Hp: %d/%d. Mana: %d/%d. Move: %d/%d. Practices: %d.\n\r",
victim->hit, victim->max_hit,
victim->mana, victim->max_mana,
victim->move, victim->max_move,
victim->practice );
strcat( buf1, buf );
sprintf( buf,
"Lv: %d. Class: %d. Align: %d. AC: %d. Gold: %d. Exp: %d.\n\r",
victim->level, victim->class, victim->alignment,
GET_AC(victim), victim->gold, victim->exp );
strcat( buf1, buf );
sprintf( buf, "Hitroll: %d. Damroll: %d. Position: %d. Wimpy: %d.\n\r",
GET_HITROLL(victim), GET_DAMROLL(victim),
victim->position, victim->wimpy );
strcat( buf1, buf );
if ( !IS_NPC( victim ) )
{
sprintf( buf, "Page Lines: %d.\n\r", victim->pcdata->pagelen );
strcat( buf1, buf );
}
sprintf( buf, "Fighting: %s.\n\r",
victim->fighting ? victim->fighting->name : "(none)" );
strcat( buf1, buf );
if ( !IS_NPC(victim) )
{
sprintf( buf,
"Thirst: %d. Full: %d. Drunk: %d. Saving throw: %d.\n\r",
victim->pcdata->condition[COND_THIRST],
victim->pcdata->condition[COND_FULL],
victim->pcdata->condition[COND_DRUNK],
victim->saving_throw );
strcat( buf1, buf );
}
sprintf( buf, "Carry number: %d. Carry weight: %d.\n\r",
victim->carry_number, victim->carry_weight );
strcat( buf1, buf );
sprintf( buf, "Age: %d. Played: %d. Timer: %d. Act: %s.\n\r",
get_age( victim ), (int) victim->played, victim->timer,
act_bit_name(victim->act) );
strcat( buf1, buf );
sprintf( buf, "Master: %s. Leader: %s. Affected by: %s.\n\r",
victim->master ? victim->master->name : "(none)",
victim->leader ? victim->leader->name : "(none)",
affect_bit_name( victim->affected_by ) );
strcat( buf1, buf );
sprintf( buf, "Short description: %s.\n\rLong description: %s",
victim->short_descr,
victim->long_descr[0] != '\0' ? victim->long_descr : "(none).\n\r" );
strcat( buf1, buf );
if ( IS_NPC(victim) && victim->spec_fun != 0 )
strcat( buf1, "Mobile has spec fun.\n\r" );
for ( paf = victim->affected; paf != NULL; paf = paf->next )
{
sprintf( buf,
"Spell: '%s' modifies %s by %d for %d hours with bits %s.\n\r",
skill_table[(int) paf->type].name,
affect_loc_name( paf->location ),
paf->modifier,
paf->duration,
affect_bit_name( paf->bitvector )
);
strcat( buf1, buf );
}
send_to_char( buf1, ch );
return;
}
void do_mfind( CHAR_DATA *ch, char *argument )
{
extern int top_mob_index;
char buf[2*MAX_STRING_LENGTH];
char buf1[2*MAX_STRING_LENGTH];
char arg[MAX_INPUT_LENGTH];
MOB_INDEX_DATA *pMobIndex;
int vnum;
int nMatch;
bool fAll;
bool found;
one_argument( argument, arg );
if ( arg[0] == '\0' )
{
send_to_char( "Mfind whom?\n\r", ch );
return;
}
buf1[0] = '\0';
fAll = !str_cmp( arg, "all" );
found = FALSE;
nMatch = 0;
/*
* Yeah, so iterating over all vnum's takes 10,000 loops.
* Get_mob_index is fast, and I don't feel like threading another link.
* Do you?
* -- Furey
*/
for ( vnum = 0; nMatch < top_mob_index; vnum++ )
{
if ( ( pMobIndex = get_mob_index( vnum ) ) != NULL )
{
nMatch++;
if ( fAll || is_name( arg, pMobIndex->player_name ) )
{
found = TRUE;
sprintf( buf, "[%5d] %s\n\r",
pMobIndex->vnum, capitalize( pMobIndex->short_descr ) );
if (!fAll)
strcat( buf1, buf );
else
send_to_char( buf, ch );
}
}
}
if ( !found )
{
send_to_char( "Nothing like that in hell, earth, or heaven.\n\r", ch );
return;
}
if(!fAll)
send_to_char( buf1, ch );
return;
}
void do_ofind( CHAR_DATA *ch, char *argument )
{
extern int top_obj_index;
char buf[2*MAX_STRING_LENGTH];
char buf1[2*MAX_STRING_LENGTH];
char arg[MAX_INPUT_LENGTH];
OBJ_INDEX_DATA *pObjIndex;
int vnum;
int nMatch;
bool fAll;
bool found;
one_argument( argument, arg );
if ( arg[0] == '\0' )
{
send_to_char( "Ofind what?\n\r", ch );
return;
}
buf1[0] = '\0';
fAll = !str_cmp( arg, "all" );
found = FALSE;
nMatch = 0;
/*
* Yeah, so iterating over all vnum's takes 10,000 loops.
* Get_obj_index is fast, and I don't feel like threading another link.
* Do you?
* -- Furey
*/
for ( vnum = 0; nMatch < top_obj_index; vnum++ )
{
if ( ( pObjIndex = get_obj_index( vnum ) ) != NULL )
{
nMatch++;
if ( fAll || is_name( arg, pObjIndex->name ) )
{
found = TRUE;
sprintf( buf, "[%5d] %s\n\r",
pObjIndex->vnum, capitalize( pObjIndex->short_descr ) );
if (!fAll)
strcat( buf1, buf );
else
send_to_char( buf, ch );
// strcat( buf1, buf );
}
}
}
if ( !found )
{
send_to_char( "Nothing like that in hell, earth, or heaven.\n\r", ch );
return;
}
if(!fAll)
send_to_char( buf1, ch );
return;
}
void do_mwhere( CHAR_DATA *ch, char *argument )
{
char buf[MAX_STRING_LENGTH];
char arg[MAX_INPUT_LENGTH];
CHAR_DATA *victim;
bool found;
one_argument( argument, arg );
if ( arg[0] == '\0' )
{
send_to_char( "Mwhere whom?\n\r", ch );
return;
}
found = FALSE;
for ( victim = char_list; victim != NULL; victim = victim->next )
{
if ( IS_NPC(victim)
&& victim->in_room != NULL
&& is_name( arg, victim->name ) )
{
found = TRUE;
sprintf( buf, "[%5d] %-28s [%5d] %s\n\r",
victim->pIndexData->vnum,
victim->short_descr,
victim->in_room->vnum,
victim->in_room->name );
send_to_char(buf, ch);
}
}
if ( !found )
{
act( "You didn't find any $T.", ch, NULL, arg, TO_CHAR );
return;
}
return;
}
// @@@
void do_shoplist( CHAR_DATA *ch, char *argument )
{
SHOP_DATA *pShop;
char buf[32768];
char buf1[MAX_STRING_LENGTH];
buf[0] = '\0';
for (pShop = shop_first; pShop; pShop = pShop->next)
{
sprintf(buf1, "%-20s opens at %2d closes at %2d buy %4d%% sell %4d%%\n\r",
get_mob_index( pShop->keeper )->short_descr, pShop->open_hour,
pShop->close_hour, pShop->profit_buy, pShop->profit_sell);
strcat( buf, buf1 );
}
send_to_char(buf, ch);
}
// @@@
void do_orphans( CHAR_DATA *ch, char *argument )
{
char buf[MAX_INPUT_LENGTH];
char buf1[32768]; // @@@ This is the limit to the response length...
OBJ_DATA *obj;
OBJ_DATA *in_obj;
bool found;
buf1[0] = '\0'; // @@@
found = FALSE;
for ( obj = object_list; obj != NULL; obj = obj->next )
{
for ( in_obj = obj; in_obj->in_obj != NULL; in_obj = in_obj->in_obj )
;
if ( in_obj->carried_by == NULL && in_obj->in_room == NULL)
{
found = TRUE;
sprintf( buf, "%s\n\r", obj->short_descr );
buf[0] = UPPER(buf[0]);
if (strlen(buf1) + strlen(buf) >= sizeof buf1 - 2) // @@@
break;
strcat(buf1, buf); // @@@
}
}
if ( !found )
send_to_char( "Nothing like that in hell, earth, or heaven.\n\r", ch );
else // @@@
send_to_char( buf1, ch ); // @@@
return;
}
void do_reboo( CHAR_DATA *ch, char *argument )
{
send_to_char( "If you want to REBOOT, spell it out.\n\r", ch );
return;
}
void do_reboot( CHAR_DATA *ch, char *argument )
{
char buf[MAX_STRING_LENGTH];
extern bool merc_down;
sprintf( buf, "Reboot by %s.", ch->name );
do_echo( ch, buf );
merc_down = TRUE;
return;
}
void do_shutdow( CHAR_DATA *ch, char *argument )
{
send_to_char( "If you want to SHUTDOWN, spell it out.\n\r", ch );
return;
}
void do_shutdown( CHAR_DATA *ch, char *argument )
{
char buf[MAX_STRING_LENGTH];
extern bool merc_down;
sprintf( buf, "Shutdown by %s.", ch->name );
append_file( ch, SHUTDOWN_FILE, buf );
strcat( buf, "\n\r" );
do_echo( ch, buf );
merc_down = TRUE;
return;
}
void do_snoop( CHAR_DATA *ch, char *argument )
{
char arg[MAX_INPUT_LENGTH];
DESCRIPTOR_DATA *d;
CHAR_DATA *victim;
one_argument( argument, arg );
if ( arg[0] == '\0' )
{
send_to_char( "Snoop whom?\n\r", ch );
return;
}
if ( ( victim = get_char_world( ch, arg ) ) == NULL )
{
send_to_char( "They aren't here.\n\r", ch );
return;
}
if ( victim->desc == NULL )
{
send_to_char( "No descriptor to snoop.\n\r", ch );
return;
}
if ( victim == ch )
{
send_to_char( "Cancelling all snoops.\n\r", ch );
for ( d = descriptor_list; d != NULL; d = d->next )
{
if ( d->snoop_by == ch->desc )
d->snoop_by = NULL;
}
return;
}
if ( victim->desc->snoop_by != NULL )
{
send_to_char( "Busy already.\n\r", ch );
return;
}
if ( get_trust( victim ) >= get_trust( ch ) )
{
send_to_char( "You failed.\n\r", ch );
return;
}
if ( ch->desc != NULL )
{
for ( d = ch->desc->snoop_by; d != NULL; d = d->snoop_by )
{
if ( d->character == victim || d->original == victim )
{
send_to_char( "No snoop loops.\n\r", ch );
return;
}
}
}
victim->desc->snoop_by = ch->desc;
send_to_char( "Ok.\n\r", ch );
return;
}
void do_switch( CHAR_DATA *ch, char *argument )
{
char arg[MAX_INPUT_LENGTH];
CHAR_DATA *victim;
one_argument( argument, arg );
if ( arg[0] == '\0' )
{
send_to_char( "Switch into whom?\n\r", ch );
return;
}
if ( ch->desc == NULL )
return;
if ( ch->desc->original != NULL )
{
send_to_char( "You are already switched.\n\r", ch );
return;
}
if ( ( victim = get_char_world( ch, arg ) ) == NULL )
{
send_to_char( "They aren't here.\n\r", ch );
return;
}
if ( victim == ch )
{
send_to_char( "Ok.\n\r", ch );
return;
}
/*
* Pointed out by Da Pub (What Mud)
*/
if ( !IS_NPC( victim ) )
{
send_to_char( "You cannot switch into a player!\n\r", ch );
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -