#include <skills.h> inherit COMMAND_BASE; /** @ignore yes */ string rec_list( mixed *args, string path, int all, int lvl, int only_leaf ) { int i, sk, o_l, non_zero, no_bonus; string str, tp, tmp; str = ""; for( i = 0 ; i < sizeof( args ) ; i += SKILL_ARR_SIZE ) { o_l = 0; tp = path +"."+ args[ i ]; // Get the level of the skill at this point. if( tp[0] == '.') tp = tp[1..]; sk = TP->query_skill( tp ); non_zero = SKILL_H->query_only_show_if_non_zero( tp ); no_bonus = SKILL_H->query_no_bonus( tp ); reset_eval_cost(); // Is this part of the tree only a leaf heirachy? if( lvl == 1 && SKILL_H->query_only_leaf(tp) ) o_l = 1; // If it is not a leaf heirachy, we show the levels and bonuses. // Or, if it is a leaf the show the bonuses is the level is // above 0 and the we are not force showing all. if( !( only_leaf || o_l ) || ( !sizeof( args[i+SKILL_BIT]) && ( sk > 0 || ( all && !non_zero ) ) ) ) str += sprintf( "%*'| 's%*'.'-s %4d "+( no_bonus ? " -\n" : "%4d\n"), ( lvl - 1 ) * 2, "", 20 - ( ( lvl - 1 ) * 2 ), args[ i ], sk, TP->query_skill_bonus( tp ) ); // It is a leaf heirachy! No bonuses, no level if this is not a leaf. if( sizeof( args[ i + SKILL_BIT ] ) && ( only_leaf || o_l || all || ( sk > 5 * lvl ) ) ) { // Generate the lower bits. tmp = rec_list( args[ i + SKILL_BIT ], path +"."+ args[i], all, lvl + 1, only_leaf || o_l ); // Only put ourselves in if the list thingy generated something. // Don't generate the list if it is the language heirachy. if( ( only_leaf || o_l ) && ( tmp != "") ) str += sprintf("%*'| 's%*'.'-s - -\n", ( lvl - 1 ) * 2, "", 20 - ( ( lvl - 1 ) * 2 ), args[ i ]) + tmp; else str += tmp; } } return str; } /* rec_list() */ /** @ignore yes */ int cmd( string word ) { string result, *bits, str; mixed *args; int i; result = ""; str = ""; add_succeeded_mess(""); args = SKILL_H->query_skills(); bits = ({ }); if( word ) { word = TP->expand_nickname(word); if( ( i = member_array( word, args ) ) == -1 ) { add_failed_mess("There are no "+word+" skills.\n"); return 0; } args = args[ i + SKILL_BIT ]; result = sprintf( "%'='*-s\n", TP->query_cols(), "=======SKILLS=======Level/Bonus"); result += sprintf("%#*-s\n", (int)TP->query_cols(), rec_list( args, word, 1, 1, 0 ) ); } else { result += sprintf("%'='*-s\n", TP->query_cols(), "=======SKILLS====== Level/Bonus"); result += sprintf("%#*-s\n", TP->query_cols(), rec_list( args, "", ( member_array("all", bits ) != -1 ), 1, 0 ) ); } TP->more_string( result, "Skills"); return 1; } /* cmd() */ /** @ignore yes */ mixed query_patterns() { return ({ "", (: cmd(0) :), "<string'skill'>", (: cmd($4[0]) :), }); } /* query_patterns() */