
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 >>