/* -*- LPC -*- */ /* * $Locker: $ * $Id: tasks.c,v 1.1 1998/01/06 05:25:41 ceres Exp $ * $Log: tasks.c,v $ * Revision 1.1 1998/01/06 05:25:41 ceres * Initial revision * */ #include <skills.h> #define SAVE_FILES "/save/tasks/" inherit "/cmds/base"; mapping awards; void create() { seteuid( "Root" ); } void main_menu( string word ) { int i, j, *numbers; string text, *words; if ( !word || ( word == "" ) ) word = " "; switch ( word[ 0 ] ) { case 'Q' : case 'q' : return; case 'L' : case 'l' : words = get_dir( SAVE_FILES +"*.o" ); if ( !sizeof( words ) ) { printf( "No tasks have been logged.\n" ); return; } for ( i = sizeof( words ) - 1; i > -1; i-- ) { words[ i ] = words[ i ][ 0 .. strlen( words[ i ] ) - 3 ]; if ( sizeof( (string *)SKILL_OB-> query_immediate_children( words[ i ] ) ) ) words[ i ] += sprintf( "%*s", 60 - strlen( words[ i ] ), "[non-primary]" ); } this_player()->set_finish_func( "main_menu", this_object() ); this_player()->more_string( "Skills with logged tasks are:\n "+ implode( words, "\n " ) +"\n", "Tasks", 1 ); return; case 'C' : case 'c' : if ( strlen( word ) < 4 ) { printf( "Syntax: C <skill>\n" ); break; } word = word[ 2 .. ]; if ( file_size( SAVE_FILES + word +".o" ) < 1 ) { printf( "There are no tasks logged for "+ word +".\n" ); break; } unguarded( (: restore_object, SAVE_FILES + word :) ); numbers = allocate( 5 ); text = "Skill awards made for "+ word +":\n"; foreach ( i in sort_array( keys( awards ), 1 ) ) { j = 0; foreach ( word in keys( awards[ i ] ) ) j += awards[ i ][ word ]; text += sprintf( " level%5d awarded by%5d tasks\n", i, j ); if ( i < 301 ) switch ( j ) { case 1 .. 4 : numbers[ 0 ]++; break; case 5 .. 9 : numbers[ 1 ]++; break; case 10 .. 19 : numbers[ 2 ]++; break; case 20 .. 49 : numbers[ 3 ]++; break; default : numbers[ 4 ]++; } } text += sprintf( "Coverage at the 1 task level is%4d%%.\n", ( numbers[ 0 ] + numbers[ 1 ] + numbers[ 2 ] + numbers[ 3 ] + numbers[ 4 ] ) / 3 ); text += sprintf( "Coverage at the 5 task level is%4d%%.\n", ( numbers[ 1 ] + numbers[ 2 ] + numbers[ 3 ] + numbers[ 4 ] ) / 3 ); text += sprintf( "Coverage at the 10 task level is%4d%%.\n", ( numbers[ 2 ] + numbers[ 3 ] + numbers[ 4 ] ) / 3 ); text += sprintf( "Coverage at the 20 task level is%4d%%.\n", ( numbers[ 3 ] + numbers[ 4 ] ) / 3 ); text += sprintf( "Coverage at the 50 task level is%4d%%.\n", numbers[ 4 ] / 3 ); this_player()->set_finish_func( "main_menu", this_object() ); this_player()->more_string( text, "Tasks", 1 ); return; case 'H' : case 'h' : printf( "\nTasks editor commands:\n\n"+ "Q : quit the quest editor\n"+ "L : list tasked skills\n"+ "C <skill> : examine coverage for <skill>\n"+ "H : get this list of commands\n\n" ); break; default : } printf( "Choose one of Q, L, C or H (for help) : " ); input_to( "main_menu" ); } /* main_menu() */ int cmd() { main_menu( "L" ); return 1; } /* cmd() */