merc.h
-) add this to merc.h somewhere
/* Flags for wpn profs */
#define WPNPROF_UNARM               1
#define WPNPROF_SLICE               2
#define WPNPROF_STAB                4
#define WPNPROF_SLASH               8
#define WPNPROF_WHIP                16
#define WPNPROF_CLAW                32
#define WPNPROF_BLAST               64
#define WPNPROF_POUND               128
#define WPNPROF_CRUSH               256
#define WPNPROF_GREP                512
#define WPNPROF_BITE                1024
#define WPNPROF_PIERCE              2048
#define WPNPROF_SUCK                4096
#define MAX_WPNPROF                 8192

later on in merc.h... dun dun dun....
-place these two in struct char_data
	int 	  pcwpnprof;
	int	  pcmaxwpnprof;


kav_fight.c
-)Throw this in void improve_wpn in kav_fight.c
  if ( IS_SET( ch->pcwpnprof, WPNPROF_SLICE ) && dtype == WPN_SLICE )
    max_skl += 100;
  if ( IS_SET( ch->pcwpnprof, WPNPROF_UNARM ) && dtype == WPN_UNARM )
    max_skl += 100;
  if ( IS_SET( ch->pcwpnprof, WPNPROF_STAB ) && dtype == WPN_STAB )
    max_skl += 100;
  if ( IS_SET( ch->pcwpnprof, WPNPROF_SLASH ) && dtype == WPN_SLASH )
    max_skl += 100;
  if ( IS_SET( ch->pcwpnprof, WPNPROF_WHIP ) && dtype == WPN_WHIP )
    max_skl += 100;
  if ( IS_SET( ch->pcwpnprof, WPNPROF_CLAW ) && dtype == WPN_CLAW )
    max_skl += 100;
  if ( IS_SET( ch->pcwpnprof, WPNPROF_BLAST ) && dtype == WPN_BLAST )
    max_skl += 100;
  if ( IS_SET( ch->pcwpnprof, WPNPROF_POUND ) && dtype == WPN_POUND )
    max_skl += 100;
  if ( IS_SET( ch->pcwpnprof, WPNPROF_CRUSH ) && dtype == WPN_CRUSH )
    max_skl += 100;
  if ( IS_SET( ch->pcwpnprof, WPNPROF_GREP ) && dtype == WPN_GREP )
    max_skl += 100;
  if ( IS_SET( ch->pcwpnprof, WPNPROF_BITE ) && dtype == WPN_BITE )
    max_skl += 100;
  if ( IS_SET( ch->pcwpnprof, WPNPROF_PIERCE ) && dtype == WPN_PIERCE )
    max_skl += 100;
  if ( IS_SET( ch->pcwpnprof, WPNPROF_SUCK ) && dtype == WPN_SUCK )
    max_skl += 100;


random c file.
-)throw this in one of ur c files, doesnt really matter which....
void do_prof(CHAR_DATA * ch, char *argument)
{
  char arg1[MAX_STRING_LENGTH];
  char buf[MSL];
  argument = one_argument( argument, arg1 );

  if (IS_NPC(ch))return;


if ( arg1[0] == '\0' )
{
  send_to_char("#0 Slash, Slice, Pound, Crush, Grep, Bite, Unarmed, Pierce, Suck, Blast, Claw, Whip, Stab..\n\r",ch);
  return;
}

if (ch->pcmaxwpnprof >= 3)
{
  send_to_char(" You may only have 3 weapon proficiencies \n\r",ch);
  return;
}

if (!str_cmp(arg1,"slash"))
{
	if (IS_SET(ch->pcwpnprof, WPNPROF_SLASH))
	{
	send_to_char("#0 You already have Slash proficiency\n\r",ch);
	return;
	}
	else
	{
	ch->pcmaxwpnprof++;
	SET_BIT(ch->pcwpnprof, WPNPROF_SLASH);
	send_to_char("#0 You now have Slash proficiency\n\r",ch);
	return;
	}
}
else if (!str_cmp(arg1,"slice"))
{
	if (IS_SET(ch->pcwpnprof, WPNPROF_SLICE))
	{
	send_to_char("#0 You already have Slice proficiency\n\r",ch);
	return;
	}
	else
	{
	ch->pcmaxwpnprof++;
	SET_BIT(ch->pcwpnprof, WPNPROF_SLICE);
	send_to_char("#0 You now have Slice proficiency\n\r",ch);
	return;
	}
}
else if (!str_cmp(arg1,"pound"))
{
	if (IS_SET(ch->pcwpnprof, WPNPROF_POUND))
	{
	send_to_char("#0 You already have Pound proficiency\n\r",ch);
	return;
	}
	else
	{
	ch->pcmaxwpnprof++;
	SET_BIT(ch->pcwpnprof, WPNPROF_POUND);
	send_to_char("#0 You now have Pound proficiency\n\r",ch);
	return;
	}
}
else if (!str_cmp(arg1,"crush"))
{
	if (IS_SET(ch->pcwpnprof, WPNPROF_CRUSH))
	{
	send_to_char("#0 You already have Crush proficiency\n\r",ch);
	return;
	}
	else
	{
	ch->pcmaxwpnprof++;
	SET_BIT(ch->pcwpnprof, WPNPROF_CRUSH);
	send_to_char("#0 You now have Crush proficiency\n\r",ch);
	return;
	}
}
else if (!str_cmp(arg1,"grep"))
{
	if (IS_SET(ch->pcwpnprof, WPNPROF_GREP))
	{
	send_to_char("#0 You already have Grep proficiency\n\r",ch);
	return;
	}
	else
	{
	ch->pcmaxwpnprof++;
	SET_BIT(ch->pcwpnprof, WPNPROF_GREP);
	send_to_char("#0 You now have Grep proficiency\n\r",ch);
	return;
	}
}
else if (!str_cmp(arg1,"bite"))
{
	if (IS_SET(ch->pcwpnprof, WPNPROF_BITE))
	{
	send_to_char("#0 You already have Bite proficiency.\n\r",ch);
	return;
	}
	else
	{
	ch->pcmaxwpnprof++;
	SET_BIT(ch->pcwpnprof, WPNPROF_BITE);
	send_to_char("#0 You now have Bite proficiency.\n\r",ch);
	return;
	}
}
else if (!str_cmp(arg1,"unarmed"))
{
	if (IS_SET(ch->pcwpnprof, WPNPROF_UNARM))
	{
	send_to_char("#0 You already have Hand-To-Hand proficiency.\n\r",ch);
	return;
	}
	else
	{
	ch->pcmaxwpnprof++;
	SET_BIT(ch->pcwpnprof, WPNPROF_UNARM);
	send_to_char("#0 You now have Unarmed proficiency.\n\r",ch);
	return;
	}
}
else if (!str_cmp(arg1,"pierce"))
{
	if (IS_SET(ch->pcwpnprof, WPNPROF_PIERCE))
	{
	send_to_char("#0 You already have Dagger Proficiency.\r",ch);
	return;
	}
	else
	{
	ch->pcmaxwpnprof++;
	SET_BIT(ch->pcwpnprof, WPNPROF_PIERCE);
	send_to_char("#0 You now have Pierce proficiency\n\r",ch);
	return;
	}
}
else if (!str_cmp(arg1,"suck"))
{
	if (IS_SET(ch->pcwpnprof, WPNPROF_SUCK))
	{
	send_to_char("#0 You already have Suck proficiency\n\r",ch);
	return;
	}
	else
	{
	ch->pcmaxwpnprof++;
	SET_BIT(ch->pcwpnprof, WPNPROF_SUCK);
	send_to_char("#0 You now have Suck proficiency\n\r",ch);
	return;
	}
}
else if (!str_cmp(arg1,"blast"))
{
	if (IS_SET(ch->pcwpnprof, WPNPROF_BLAST))
	{
	send_to_char("#0 You already have Blast proficiency\n\r",ch);
	return;
	}
	else
	{
	ch->pcmaxwpnprof++;
	SET_BIT(ch->pcwpnprof, WPNPROF_BLAST);
	send_to_char("#0 You now have Blast proficiency\n\r",ch);
	return;
	}
}
else if (!str_cmp(arg1,"claw"))
{
	if (IS_SET(ch->pcwpnprof, WPNPROF_CLAW))
	{
	send_to_char("#0 You already have Claw proficiency\n\r",ch);
	return;
	}
	else
	{
	ch->pcmaxwpnprof++;
	SET_BIT(ch->pcwpnprof, WPNPROF_CLAW);
	send_to_char("#0 You now have Claw proficiency\n\r",ch);
	return;
	}
}
else if (!str_cmp(arg1,"whip"))
{
	if (IS_SET(ch->pcwpnprof, WPNPROF_WHIP))
	{
	send_to_char("#0 You already have Whip proficiency\n\r",ch);
	return;
	}
	else
	{
	ch->pcmaxwpnprof++;
	SET_BIT(ch->pcwpnprof, WPNPROF_WHIP);
	send_to_char("#0 You now have Whip proficiency\n\r",ch);
	return;
	}
}
else if (!str_cmp(arg1,"stab"))
{
	if (IS_SET(ch->pcwpnprof, WPNPROF_STAB))
	{
	send_to_char("#0 You already have Stab proficiency\n\r",ch);
	return;
	}
	else
	{
	ch->pcmaxwpnprof++;
	SET_BIT(ch->pcwpnprof, WPNPROF_STAB);
	send_to_char("#0 You now have Stab proficiency\n\r",ch);
	return;
	}
}
return;
}







Save.c
void fwrite_char
        fprintf(fp, "Pcwpnprof    %d\n", ch->pcwpnprof);
        fprintf(fp, "Pcmaxwpnprof %d\n", ch->pcmaxwpnprof);

bool load_char_short
        ch->pcwpnprof = 0;
        ch->pcmaxwpnprof = 0;

bool load_char_obj
        ch->pcwpnprof = 0;
        ch->pcmaxwpnprof = 0;

void fread_char
	KEY("Pcwpnprof", ch->pcwpnprof, fread_number( fp ) );
	KEY("Pcmaxwpnprof", ch->pcmaxwpnprof, fread_number( fp ) );