#include <string.h> #include "mud.h" static const int STARTING_SKILLEVEL = 50; static void package_builder_architect( CHAR_DATA *ch ) { set_skill_level( ch, gsn_survey, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_landscape, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_construction, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_bridge, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_spacecraft, STARTING_SKILLEVEL ); ch->pcdata->num_skills = 5; } static void package_builder_soldier( CHAR_DATA *ch ) { set_skill_level( ch, gsn_spacecraft, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_blasters, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_enhanced_damage, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_kick, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_second_attack, STARTING_SKILLEVEL ); ch->pcdata->num_skills = 5; } static void package_builder_medic( CHAR_DATA *ch ) { set_skill_level( ch, gsn_spacecraft, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_aid, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_first_aid, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_rescue, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_dodge, STARTING_SKILLEVEL ); ch->pcdata->num_skills = 5; } static void package_builder_assassin( CHAR_DATA *ch ) { set_skill_level( ch, gsn_spacecraft, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_backstab, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_vibro_blades, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_poison_weapon, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_track, STARTING_SKILLEVEL ); ch->pcdata->num_skills = 5; } static void package_builder_pilot( CHAR_DATA *ch ) { set_skill_level( ch, gsn_spacecraft, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_shipmaintenance, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_shipdesign, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_weaponsystems, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_spacecombat, STARTING_SKILLEVEL ); ch->pcdata->num_skills = 5; } static void package_builder_senator( CHAR_DATA *ch ) { set_skill_level( ch, gsn_spacecraft, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_survey, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_postguard, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_reinforcements, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_propeganda, STARTING_SKILLEVEL ); ch->pcdata->num_skills = 5; } static void package_builder_spy( CHAR_DATA *ch ) { set_skill_level( ch, gsn_spacecraft, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_sneak, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_peek, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_pick_lock, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_hide, STARTING_SKILLEVEL ); ch->pcdata->num_skills = 5; } static void package_builder_thief( CHAR_DATA *ch ) { set_skill_level( ch, gsn_spacecraft, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_steal, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_peek, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_pick_lock, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_hide, STARTING_SKILLEVEL ); ch->pcdata->num_skills = 5; } static void package_builder_pirate( CHAR_DATA *ch ) { set_skill_level( ch, gsn_spacecraft, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_hijack, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_pickshiplock, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_weaponsystems, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_pick_lock, STARTING_SKILLEVEL ); ch->pcdata->num_skills = 5; } static void package_builder_tailor( CHAR_DATA *ch ) { set_skill_level( ch, gsn_spacecraft, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_makearmor, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_makecontainer, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_makejewelry, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_quicktalk, STARTING_SKILLEVEL ); ch->pcdata->num_skills = 5; } static void package_builder_weaponsmith( CHAR_DATA *ch ) { set_skill_level( ch, gsn_spacecraft, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_makeblaster, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_makeblade, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_makeshield, STARTING_SKILLEVEL ); set_skill_level( ch, gsn_quicktalk, STARTING_SKILLEVEL ); ch->pcdata->num_skills = 5; } static SKILL_PACKAGE package_table[] = { { "Architect", package_builder_architect }, { "Assassin", package_builder_assassin }, { "Medic", package_builder_medic }, { "Pilot", package_builder_pilot }, { "Pirate", package_builder_pirate }, { "Senator", package_builder_senator }, { "Soldier", package_builder_soldier }, { "Spy", package_builder_spy }, { "Tailor", package_builder_tailor }, { "Thief", package_builder_thief }, { "Weaponsmith", package_builder_weaponsmith } }; size_t skill_package_table_size( void ) { return sizeof( package_table ) / sizeof( *package_table ); } SKILL_PACKAGE *get_skill_package( const char *argument ) { size_t n = 0; for( n = 0; n < skill_package_table_size(); ++n ) { SKILL_PACKAGE *package = &(package_table[n]); if( !str_prefix( argument, package->name ) ) { return package; } } return NULL; } static size_t longest_package_name( void ) { size_t longest = 0, n = 0; for( n = 0; n < skill_package_table_size(); ++n ) { size_t current = strlen( package_table[n].name ); if( current > longest ) { longest = current; } } return longest; } char *generate_skillpackage_table( void ) { const int min_pad = 10; const int columns = 3; size_t n = 0; static char buf[MAX_STRING_LENGTH]; *buf = '\0'; for( n = 0; n < skill_package_table_size(); ++n ) { size_t pad = longest_package_name() - strlen( package_table[n].name ) + min_pad; size_t pad_iter = 0; strcat( buf, package_table[n].name ); for( pad_iter = 0; pad_iter < pad; ++pad_iter ) { strcat( buf, " " ); } if( ( n + 1 ) % columns == 0 ) { strcat( buf, "\r\n" ); } } strcat( buf, "\r\n" ); return buf; }