swr2.0/
swr2.0/area/
swr2.0/boards/
swr2.0/clans/
swr2.0/doc/
swr2.0/planets/
swr2.0/spacecraft/
#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;
}