I am completely redoing my who list. i searched this site for some help but it seemed like everyone else had the same problem and didn't say if they fixed it or not. so here i go as well. what i'm wanting it this:
here's what i have so far code wise:
Thanks
Ithildin
[---------------------Immortals--------------------]
[Supreme Intity ] Ithildin ]
[--------------------------------------------------]
[---------------------Mortals----------------------]
[ 10 Cleric ] Player ]
[ 15 Ranger ] Player ]
[ 28 Mage ] Player ]
[--------------------------------------------------]
You see 3 players in the game.
The high players this reboot was 25.
here's what i have so far code wise:
void do_who( CHAR_DATA *ch, char *argument )
{
char buf[MAX_STRING_LENGTH];
// char clan_name[MAX_INPUT_LENGTH];
char invis_str[MAX_INPUT_LENGTH];
char char_name[MAX_INPUT_LENGTH];
char class_text[MAX_INPUT_LENGTH];
DESCRIPTOR_DATA *d;
int iClass, iRace;
int iLevelLower;
int iLevelUpper;
int nNumber;
int nMatch;
bool rgfClass[MAX_CLASS];
bool rgfRace[MAX_RACE];
bool fImmortalOnly;
//CLAN_DATA *pClan = NULL;
FILE *whoout = NULL;
iLevelLower = 0;
iLevelUpper = MAX_LEVEL;
fImmortalOnly = FALSE;
WHO_DATA *cur_who = NULL;
WHO_DATA *next_who = NULL;
WHO_DATA *first_mortal = NULL;
WHO_DATA *first_imm = NULL;
for ( iClass = 0; iClass < MAX_CLASS; iClass++ )
rgfClass[iClass] = FALSE;
for ( iRace = 0; iRace < MAX_RACE; iRace++ )
rgfRace[iRace] = FALSE;
nNumber = 0;
for ( ;; )
{
char arg[MAX_STRING_LENGTH];
argument = one_argument( argument, arg );
if ( arg[0] == '\0' )
break;
if ( is_number( arg ) )
{
switch ( ++nNumber )
{
case 1: iLevelLower = atoi( arg ); break;
case 2: iLevelUpper = atoi( arg ); break;
default:
send_to_char( "Only two level numbers allowed.\n\r", ch );
return;
}
}
else
{
if ( strlen(arg) < 3 )
{
send_to_char( "Arguments must be longer than that.\n\r", ch );
return;
}
CHAR_DATA *wch;
char const *class;
if ( (d->connected != CON_PLAYING && d->connected != CON_EDITING)
|| !can_see( ch, d->character ) || d->original)
continue;
wch = d->original ? d->original : d->character;
strcpy( char_name, wch->name );
sprintf( class_text, "%s%2d %s", NOT_AUTHED(wch) ? "" : "", wch->level, class_table[wch->class]->who_name );
class = class_text;
/*sprintf( class_text, "&w[&W%s &c%s&w]", wch->level, class_table[wch->class]->who_name );
class = class_text;*/
switch ( wch->level )
{
default: break;
case MAX_LEVEL - 0: class = "&W&cSu&Cp&Br&ceme Entity&Y&W"; break;
case MAX_LEVEL - 1: class = "&W&CInfinite&Y&W "; break;
case MAX_LEVEL - 2: class = "&W&pEternal&Y&W "; break;
case MAX_LEVEL - 3: class = "&Y&WAncient "; break;
case MAX_LEVEL - 4: class = "&Y&WExalted God "; break;
case MAX_LEVEL - 5: class = "&Y&WAscendant God "; break;
case MAX_LEVEL - 6: class = "&Y&WGreater God "; break;
case MAX_LEVEL - 7: class = "&Y&WGod "; break;
case MAX_LEVEL - 8: class = "&Y&WLesser God "; break;
case MAX_LEVEL - 9: class = "&Y&WImmortal "; break;
case MAX_LEVEL - 10: class = "&Y&WDemi God "; break;
case MAX_LEVEL - 11: class = "&Y&WSavior "; break;
case MAX_LEVEL - 12: class = "&Y&WCreator "; break;
case MAX_LEVEL - 13: class = "&Y&WAcolyte "; break;
case MAX_LEVEL - 14: class = "&Y&WNeophyte "; break;
case MAX_LEVEL - 15: class = "&Y&WAvatar "; break;
}
if ( xIS_SET(wch->act, PLR_WIZINVIS) )
sprintf( invis_str, "(%d) ", wch->pcdata->wizinvis );
else
invis_str[0] = '\0';
CREATE( cur_who, WHO_DATA, 1 );
cur_who->text = str_dup( buf );
if ( wch->level > 100 && IS_IMMORTAL( wch ) )
cur_who->type = WT_IMM;
if ( first_imm )
{
if ( !ch )
fprintf( whoout, "&c\n\r[--------------------------------[ &WIMMORTALS&c ]----------------------------]\n\r\n\r" );
else
send_to_pager( "&c\n\r[-------------------------------[ &WIMMORTALS&c ]----------------------------]\n\r\n\r", ch );
}
for ( cur_who = first_imm; cur_who; cur_who = next_who )
{
if ( !ch )
fprintf( whoout, cur_who->text );
else
send_to_pager( cur_who->text, ch );
next_who = cur_who->next;
DISPOSE( cur_who->text );
DISPOSE( cur_who );
}
if ( first_mortal )
{
if ( !ch )
fprintf( whoout, "&c\n\r[-------------------------------[ &WADVENTURERS&c ]-------------------------]\n\r\n\r" );
else
send_to_pager( "&c\n\r[-------------------------------[ &WADVENTURERS&c ]--------------------------]\n\r\n\r", ch );
}
for ( cur_who = first_mortal; cur_who; cur_who = next_who )
{
if ( !ch )
fprintf( whoout, cur_who->text );
else
send_to_pager( cur_who->text, ch );
next_who = cur_who->next;
DISPOSE( cur_who->text );
DISPOSE( cur_who );
}
if ( !ch )
{
fprintf( whoout, "%d player%s.\n\r", nMatch, nMatch == 1 ? "" : "s" );
fclose( whoout );
return;
}
send_to_pager( "&w\n\r[------------------------------------------------------------------------]\n\r\n\r", ch );
set_char_color( AT_YELLOW, ch );
ch_printf( ch, "%d player%s.\n\r", nMatch, nMatch == 1 ? "" : "s" );
return;
}
Thanks
Ithildin