Pages:<< prev 1 next >>
Apprentice

GroupMembers
Posts78
JoinedAug 28, 2016
First off, I want to thank everyone on this forum for all the help. It has served an invaluable resource.
What I am trying to do, is get the standard "practice" command to ONLY show spells. Not skills, not tongues, not weapons, not styles... JUST spells. I am not an adept coder but I have tried for a while to get this to ONLY display spells and could really use some help.
What I am trying to do, is get the standard "practice" command to ONLY show spells. Not skills, not tongues, not weapons, not styles... JUST spells. I am not an adept coder but I have tried for a while to get this to ONLY display spells and could really use some help.
void do_practice( CHAR_DATA* ch, const char* argument)
{
CHAR_DATA *mob;
char buf[MAX_STRING_LENGTH];
int sn;
if( IS_NPC( ch ) )
return;
for( mob = ch->in_room->first_person; mob; mob = mob->next_in_room )
if( IS_NPC( mob ) && xIS_SET( mob->act, ACT_PRACTICE ) )
break;
if( argument[0] == '\0' )
{
int col;
short lasttype, cnt;
bool is_ok;
col = cnt = 0;
lasttype = SKILL_SPELL;
set_pager_color( AT_MAGIC, ch );
for( sn = 0; sn < num_skills; ++sn )
{
const SKILLTYPE *skill;
int normalSn;
// the first num_sorted_skills are sorted by type, so we don't want
// to index into skill_table -- that is sorted alphabetically -- so
// we need to do the following dance to check if we are in the
// sorted section or the unsorted section.
if( sn < num_sorted_skills )
{
skill = skill_table_bytype[sn];
// we are looping over the skills sorted by type.
// So, we need to get the normal sn as well.
normalSn = skill_lookup( skill->name );
}
else
{
skill = skill_table[sn];
normalSn = sn;
}
if( !skill || !skill->name || skill->name[0] == '\0' )
continue;
if( strcmp( skill->name, "reserved" ) == 0 && ( IS_IMMORTAL( ch ) || CAN_CAST( ch ) ) )
{
if( col % 3 != 0 )
send_to_pager( "\r\n", ch );
set_pager_color( AT_MAGIC, ch );
send_to_pager_color( " ----------------------------------[&CSpells&B]----------------------------------\r\n",
ch );
col = 0;
}
if( skill->type != lasttype )
{
if( !cnt )
send_to_pager( " (none)\r\n", ch );
else if( col % 3 != 0 )
send_to_pager( "\r\n", ch );
set_pager_color( AT_MAGIC, ch );
pager_printf_color( ch,
" ----------------------------------&C%ss&B----------------------------------\r\n",
skill_tname[skill->type] );
col = cnt = 0;
}
lasttype = skill->type;
if( !IS_IMMORTAL( ch )
&& ( skill->guild != CLASS_NONE && ( !IS_GUILDED( ch ) || ( ch->pcdata->clan->Class != skill->guild ) ) ) )
continue;
if( mob )
{
if( skill->skill_level[mob->Class] > mob->level && skill->race_level[mob->race] > mob->level )
continue;
}
else
{
is_ok = FALSE;
if( ch->level >= skill->skill_level[ch->Class] )
is_ok = TRUE;
if( ch->level >= skill->race_level[ch->race] )
is_ok = TRUE;
if( !is_ok )
continue;
}
if( ch->pcdata->learned[sn] <= 0 && SPELL_FLAG( skill, SF_SECRETSKILL ) )
continue;
++cnt;
set_pager_color( AT_MAGIC, ch );
pager_printf( ch, "%20.20s", skill->name );
if( ch->pcdata->learned[normalSn] > 0 )
set_pager_color( AT_SCORE, ch );
pager_printf( ch, " %3d%% ", ch->pcdata->learned[normalSn] );
if( ++col % 3 == 0 )
send_to_pager( "\r\n", ch );
}
if( col % 3 != 0 )
send_to_pager( "\r\n", ch );
set_pager_color( AT_MAGIC, ch );
pager_printf( ch, "You have %d practice sessions left.\r\n", ch->practice );
}
Geomancer

GroupAdministrators
Posts1,992
JoinedJul 26, 2005
try changing
to this
Mainly you just want to skip any thing that isn't a spell and that should do what youre wanting.
if( !skill || !skill->name || skill->name[0] == '\0' ) continue; if( strcmp( skill->name, "reserved" ) == 0 && ( IS_IMMORTAL( ch ) || CAN_CAST( ch ) ) )
to this
if( !skill || !skill->name || skill->name[0] == '\0' ) continue; if( skill->type != SKILL_SPELL ) continue; if( strcmp( skill->name, "reserved" ) == 0 && ( IS_IMMORTAL( ch ) || CAN_CAST( ch ) ) )
Mainly you just want to skip any thing that isn't a spell and that should do what youre wanting.
Pages:<< prev 1 next >>