What This Snippit is going to do is give you 24 races, a bunch of races powers,
ascension code, selfrace code etc.. it is also going to have Race Levels which
will go to 200. The players will get spells/skills at certain race levels, which
they will get with the gainlevel command..

Your Friendly Neighborhood Coder and Mud Owner,
-Xrakisis



/* merc.h */
place these three in struct char_data
        int       pcRace;
	int	  pcRaceLevel;
	int	  pcpractice;

make (below), the THIRD ONE DOWN in struct skill_type
	sh_int    race_level;  /* Level needed by Race -xrakisis */


/* more merc.h, you can pretty much put this wherever u want in merc.h */ 
#define RACE_HUMAN		1
#define RACE_ELF		2
#define	RACE_GNOME		3
#define RACE_GULLYDWARF		4
#define RACE_HILLDWARF		5
#define RACE_MTDWARF		6
#define RACE_DRAGONKIND		7
#define RACE_HOBBIT		8
#define RACE_KENDER		9
#define RACE_DROW		10
#define RACE_GIANT		11
#define RACE_HALFELF		12
#define RACE_OGRE		13
#define RACE_HALFOGRE		14
#define RACE_MINOTAUR		15
#define RACE_GOBLIN		16
#define RACE_HOBGOBLIN		17 
#define RACE_DUERGARDWARF	18
#define	RACE_TROLL		19
#define RACE_HALFTROLL		20
#define RACE_ORC		21
#define RACE_HALFORC		22
#define RACE_CENTAUR		23
#define RACE_WILDELF		24
#define RACE_ARCHDEMON		25
#define RACE_ARCHANGEL		26

/* more merc.h */
EXAMPLE:
struct skill_type
{
        char     *name; /* Name of skill        */
        sh_int    skill_level;  /* Level needed by class    */
	sh_int    race_level;  /* Level needed by Race for spells -xrakisis */
        SPELL_FUN *spell_fun;   /* Spell pointer (for spells)   */
        sh_int    target;   /* Legal targets        */
        sh_int    minimum_position; /* Position for caster / user   */
        sh_int   *pgsn; /* Pointer to associated gsn    */
        sh_int    slot; /* Slot for #OBJECT loading */
        sh_int    min_mana; /* Minimum mana used        */
        sh_int    beats;    /* Waiting time after use   */
        char     *noun_damage;  /* Damage message       */
        char     *msg_off;  /* Wear off message     */
};


/* merc.h */
Place this underneath IS_CLASS in merc.h
#define IS_RACE(ch, RACE)     ((ch)->pcRace == RACE && (ch->level >= LEVEL_AVATAR))


/* save.c */
void fwrite_char
        fprintf(fp, "PlayerRace   %d\n", ch->pcRace);
	fprintf(fp, "PlayerRaceLevel %d\n", ch->pcRaceLevel);
	fprintf(fp, "PcPractice   %d\n", ch->pcpractice);
bool load_char_short
	ch->pcRace = 0;
	ch->pcRaceLevel = 0;
        ch->pcpractice = 0;
bool load_char_obj
	ch->pcRace = 0;
	ch->pcRaceLevel = 0;
        ch->pcpractice = 0;
void fread_char
	case P:
	KEY("PlayerRace", ch->pcRace, fread_number( fp ) );
	KEY("PlayerRaceLevel", ch->pcRaceLevel, fread_number( fp ) );
	KEY("PcPractice", ch->pcpractice, fread_number( fp ) );


/* const.c */
Here is an example of what you want your identify to look like. (below)

        {
         "identify", 1, 5,
         spell_identify, TAR_OBJ_INV, POS_STANDING,
         NULL, SLOT(53), 12, 0,
         "", "!Identify!"},

This is probably what your identify looks like now....(below)

        {
         "identify", 1,
         spell_identify, TAR_OBJ_INV, POS_STANDING,
         NULL, SLOT(53), 12, 0,
         "", "!Identify!"},

notice the added , 5, after ident and after 1? the number 5 will be the race level 
that people get the spell at... make it whatever you want for every single entry in 
const.c its a lot, but it will only take ya like 20 minutes, deal.


/* act_info.c */
Below is a replacement for the pkstatus rank names in do_who in act_info...

				else if (IS_RACE(wch, RACE_HUMAN))
					class = "  #0Human#n         ";
                                else if (IS_RACE(wch, RACE_ELF))
                                        class = "  #0High Elf#n      ";
                                else if (IS_RACE(wch, RACE_GNOME))
                                        class = "  #0Gnome#n         ";
                                else if (IS_RACE(wch, RACE_GULLYDWARF))
                                        class = "  #0Gully Dwarf#n   ";
                                else if (IS_RACE(wch, RACE_HILLDWARF))
                                        class = "  #0Hill Dwarf#n    ";
                                else if (IS_RACE(wch, RACE_MTDWARF))
                                        class = "  #0Mountain Dwarf#n";
                                else if (IS_RACE(wch, RACE_DRAGONKIND))
                                        class = "  #0DragonKind#n    ";
                                else if (IS_RACE(wch, RACE_HOBBIT))
                                        class = "  #0Hobbit#n        ";
                                else if (IS_RACE(wch, RACE_KENDER))
                                        class = "  #0Kender#n        ";
                                else if (IS_RACE(wch, RACE_DROW))
                                        class = "  #0Drow#n          ";
                                else if (IS_RACE(wch, RACE_GIANT))
                                        class = "  #0Giant#n         ";
                                else if (IS_RACE(wch, RACE_HALFELF))
                                        class = "  #0Half Elf#n      ";
                                else if (IS_RACE(wch, RACE_OGRE))
                                        class = "  #0Ogre#n          ";
                                else if (IS_RACE(wch, RACE_HALFOGRE))
                                        class = "  #0Half Ogre#n     ";
                                else if (IS_RACE(wch, RACE_MINOTAUR))
                                        class = "  #0Minotaur#n      ";
                                else if (IS_RACE(wch, RACE_GOBLIN))
                                        class = "  #0Goblin#n        ";
                                else if (IS_RACE(wch, RACE_HOBGOBLIN))
                                        class = "  #0HobGoblin#n     ";
                                else if (IS_RACE(wch, RACE_DUERGARDWARF))
                                        class = "  #0Duergar#n       ";
                                else if (IS_RACE(wch, RACE_TROLL))
                                        class = "  #0Troll#n         ";
                                else if (IS_RACE(wch, RACE_HALFTROLL))
                                        class = "  #0Half Troll#n    ";
                                else if (IS_RACE(wch, RACE_ORC))
                                        class = "  #0Orc#n           ";
                                else if (IS_RACE(wch, RACE_HALFORC))
                                        class = "  #0Half Orc#n      ";
                                else if (IS_RACE(wch, RACE_CENTAUR))
                                        class = "  #0Centaur#n       ";
                                else if (IS_RACE(wch, RACE_WILDELF))
                                        class = "  #0Wild Elf#n      ";
                                else if (IS_RACE(wch, RACE_ARCHDEMON))
                                        class = "  #0Arch-Demon#n    ";
                                else if (IS_RACE(wch, RACE_ARCHANGEL))
                                        class = "  #0Arch-Angel#n    ";
				else 
					class = "                ";
                                break;





/* handler.c */
here is some shit for handler.c

/*
 * Retrieve character's current strength.
 */
int get_curr_str(CHAR_DATA * ch)
{
        int       max;

        if (IS_NPC(ch))
                return 13;

	max = 50;
        if (IS_IMMORTAL(ch))
                max = 120;

        if (IS_RACE(ch, RACE_HUMAN)) max = 80;
        if (IS_RACE(ch, RACE_ELF)) max = 80;
        if (IS_RACE(ch, RACE_GNOME)) max = 60;
        if (IS_RACE(ch, RACE_GULLYDWARF)) max = 80;
        if (IS_RACE(ch, RACE_HILLDWARF)) max = 100;
        if (IS_RACE(ch, RACE_MTDWARF)) max = 100;
        if (IS_RACE(ch, RACE_DRAGONKIND)) max = 100;
        if (IS_RACE(ch, RACE_HOBBIT)) max = 60;
        if (IS_RACE(ch, RACE_KENDER)) max = 60;
        if (IS_RACE(ch, RACE_DROW)) max = 80;
        if (IS_RACE(ch, RACE_GIANT)) max = 110;
        if (IS_RACE(ch, RACE_HALFELF)) max = 80;
        if (IS_RACE(ch, RACE_OGRE)) max = 100;
        if (IS_RACE(ch, RACE_HALFOGRE)) max = 90;
        if (IS_RACE(ch, RACE_MINOTAUR)) max = 100;
        if (IS_RACE(ch, RACE_GOBLIN)) max = 60;
        if (IS_RACE(ch, RACE_HOBGOBLIN)) max = 80;
        if (IS_RACE(ch, RACE_DUERGARDWARF)) max = 100;
        if (IS_RACE(ch, RACE_TROLL)) max = 100;
        if (IS_RACE(ch, RACE_HALFTROLL)) max = 90;
        if (IS_RACE(ch, RACE_ORC)) max = 80;
        if (IS_RACE(ch, RACE_HALFORC)) max = 80;
        if (IS_RACE(ch, RACE_CENTAUR)) max = 80;
        if (IS_RACE(ch, RACE_WILDELF)) max = 80;
        if (IS_RACE(ch, RACE_ARCHANGEL)) max = 110;
        if (IS_RACE(ch, RACE_ARCHDEMON)) max = 110;



        return URANGE(3, ch->pcdata->perm_str + ch->pcdata->mod_str, max);
}

/*
 * Retrieve character's current intelligence.
 */
int get_curr_int(CHAR_DATA * ch)
{
        int       max;

        if (IS_NPC(ch))
                return 13;

        max = 50;
        if (IS_IMMORTAL(ch))
        max = 120;
        if (IS_RACE(ch, RACE_HUMAN)) max = 80;
        if (IS_RACE(ch, RACE_ELF)) max = 100;
        if (IS_RACE(ch, RACE_GNOME)) max = 110;
        if (IS_RACE(ch, RACE_GULLYDWARF)) max = 80;
        if (IS_RACE(ch, RACE_HILLDWARF)) max = 80;
        if (IS_RACE(ch, RACE_MTDWARF)) max = 80;
        if (IS_RACE(ch, RACE_DRAGONKIND)) max = 100;
        if (IS_RACE(ch, RACE_HOBBIT)) max = 80;
        if (IS_RACE(ch, RACE_KENDER)) max = 90;
        if (IS_RACE(ch, RACE_DROW)) max = 100;
        if (IS_RACE(ch, RACE_GIANT)) max = 60;
        if (IS_RACE(ch, RACE_HALFELF)) max = 80;
        if (IS_RACE(ch, RACE_OGRE)) max = 60;
        if (IS_RACE(ch, RACE_HALFOGRE)) max = 70;
        if (IS_RACE(ch, RACE_MINOTAUR)) max = 70;
        if (IS_RACE(ch, RACE_GOBLIN)) max = 60;
        if (IS_RACE(ch, RACE_HOBGOBLIN)) max = 70;
        if (IS_RACE(ch, RACE_DUERGARDWARF)) max = 80;
        if (IS_RACE(ch, RACE_TROLL)) max = 60;
        if (IS_RACE(ch, RACE_HALFTROLL)) max = 70;
        if (IS_RACE(ch, RACE_ORC)) max = 70;
        if (IS_RACE(ch, RACE_HALFORC)) max = 70;
        if (IS_RACE(ch, RACE_CENTAUR)) max = 80;
        if (IS_RACE(ch, RACE_WILDELF)) max = 100;
        if (IS_RACE(ch, RACE_ARCHANGEL)) max = 110;
        if (IS_RACE(ch, RACE_ARCHDEMON)) max = 110;

        return URANGE(3, ch->pcdata->perm_int + ch->pcdata->mod_int, max);
}

/*
 * Retrieve character's current wisdom.
 */
int get_curr_wis(CHAR_DATA * ch)
{
        int       max;

        if (IS_NPC(ch))
                return 13;

        max = 50;

        if (IS_IMMORTAL(ch))
                max = 120;

        if (IS_RACE(ch, RACE_HUMAN)) max = 80;
        if (IS_RACE(ch, RACE_ELF)) max = 100;
        if (IS_RACE(ch, RACE_GNOME)) max = 110;
        if (IS_RACE(ch, RACE_GULLYDWARF)) max = 80;
        if (IS_RACE(ch, RACE_HILLDWARF)) max = 80;
        if (IS_RACE(ch, RACE_MTDWARF)) max = 80;
        if (IS_RACE(ch, RACE_DRAGONKIND)) max = 100;
        if (IS_RACE(ch, RACE_HOBBIT)) max = 80;
        if (IS_RACE(ch, RACE_KENDER)) max = 90;
        if (IS_RACE(ch, RACE_DROW)) max = 100;
        if (IS_RACE(ch, RACE_GIANT)) max = 60;
        if (IS_RACE(ch, RACE_HALFELF)) max = 80;
        if (IS_RACE(ch, RACE_OGRE)) max = 60;
        if (IS_RACE(ch, RACE_HALFOGRE)) max = 70;
        if (IS_RACE(ch, RACE_MINOTAUR)) max = 70;
        if (IS_RACE(ch, RACE_GOBLIN)) max = 60;
        if (IS_RACE(ch, RACE_HOBGOBLIN)) max = 70;
        if (IS_RACE(ch, RACE_DUERGARDWARF)) max = 80;
        if (IS_RACE(ch, RACE_TROLL)) max = 60;
        if (IS_RACE(ch, RACE_HALFTROLL)) max = 70;
        if (IS_RACE(ch, RACE_ORC)) max = 70;
        if (IS_RACE(ch, RACE_HALFORC)) max = 70;
        if (IS_RACE(ch, RACE_CENTAUR)) max = 80;
        if (IS_RACE(ch, RACE_WILDELF)) max = 100;
        if (IS_RACE(ch, RACE_ARCHANGEL)) max = 110;
        if (IS_RACE(ch, RACE_ARCHDEMON)) max = 110;

        return URANGE(3, ch->pcdata->perm_wis + ch->pcdata->mod_wis, max);
}

/*
 * Retrieve character's current dexterity.
 */
int get_curr_dex(CHAR_DATA * ch)
{
        int       max;

        if (IS_NPC(ch))
                return 13;

        max = 50;

        if (IS_CLASS(ch, CLASS_SAMURAI) || IS_IMMORTAL(ch))
                max = 120;

        if (IS_RACE(ch, RACE_HUMAN)) max = 80;
        if (IS_RACE(ch, RACE_ELF)) max = 100;
        if (IS_RACE(ch, RACE_GNOME)) max = 90;
        if (IS_RACE(ch, RACE_GULLYDWARF)) max = 80;
        if (IS_RACE(ch, RACE_HILLDWARF)) max = 80;
        if (IS_RACE(ch, RACE_MTDWARF)) max = 80;
        if (IS_RACE(ch, RACE_DRAGONKIND)) max = 100;
        if (IS_RACE(ch, RACE_HOBBIT)) max = 80;
        if (IS_RACE(ch, RACE_KENDER)) max = 100;
        if (IS_RACE(ch, RACE_DROW)) max = 100;
        if (IS_RACE(ch, RACE_GIANT)) max = 60;
        if (IS_RACE(ch, RACE_HALFELF)) max = 90;
        if (IS_RACE(ch, RACE_OGRE)) max = 60;
        if (IS_RACE(ch, RACE_HALFOGRE)) max = 80;
        if (IS_RACE(ch, RACE_MINOTAUR)) max = 80;
        if (IS_RACE(ch, RACE_GOBLIN)) max = 70;
        if (IS_RACE(ch, RACE_HOBGOBLIN)) max = 70;
        if (IS_RACE(ch, RACE_DUERGARDWARF)) max = 70;
        if (IS_RACE(ch, RACE_TROLL)) max = 60;
        if (IS_RACE(ch, RACE_HALFTROLL)) max = 70;
        if (IS_RACE(ch, RACE_ORC)) max = 70;
        if (IS_RACE(ch, RACE_HALFORC)) max = 70;
        if (IS_RACE(ch, RACE_CENTAUR)) max = 80;
        if (IS_RACE(ch, RACE_WILDELF)) max = 100;
        if (IS_RACE(ch, RACE_ARCHANGEL)) max = 110;
        if (IS_RACE(ch, RACE_ARCHDEMON)) max = 110;

        return URANGE(3, ch->pcdata->perm_dex + ch->pcdata->mod_dex, max);
}

/*
 * Retrieve character's current constitution.
 */
int get_curr_con(CHAR_DATA * ch)
{
        int       max;

        if (IS_NPC(ch))
                return 13;

        max = 50;

        if (IS_CLASS(ch, CLASS_SAMURAI) || IS_IMMORTAL(ch))
                max = 120;

        if (IS_RACE(ch, RACE_HUMAN)) max = 80;
        if (IS_RACE(ch, RACE_ELF)) max = 70;
        if (IS_RACE(ch, RACE_GNOME)) max = 60;
        if (IS_RACE(ch, RACE_GULLYDWARF)) max = 100;
        if (IS_RACE(ch, RACE_HILLDWARF)) max = 100;
        if (IS_RACE(ch, RACE_MTDWARF)) max = 100;
        if (IS_RACE(ch, RACE_DRAGONKIND)) max = 100;
        if (IS_RACE(ch, RACE_HOBBIT)) max = 80;
        if (IS_RACE(ch, RACE_KENDER)) max = 60;
        if (IS_RACE(ch, RACE_DROW)) max = 70;
        if (IS_RACE(ch, RACE_GIANT)) max = 100;
        if (IS_RACE(ch, RACE_HALFELF)) max = 80;
        if (IS_RACE(ch, RACE_OGRE)) max = 100;
        if (IS_RACE(ch, RACE_HALFOGRE)) max = 90;
        if (IS_RACE(ch, RACE_MINOTAUR)) max = 90;
        if (IS_RACE(ch, RACE_GOBLIN)) max = 60;
        if (IS_RACE(ch, RACE_HOBGOBLIN)) max = 80;
        if (IS_RACE(ch, RACE_DUERGARDWARF)) max = 100;
        if (IS_RACE(ch, RACE_TROLL)) max = 120;
        if (IS_RACE(ch, RACE_HALFTROLL)) max = 110;
        if (IS_RACE(ch, RACE_ORC)) max = 80;
        if (IS_RACE(ch, RACE_HALFORC)) max = 80;
        if (IS_RACE(ch, RACE_CENTAUR)) max = 80;
        if (IS_RACE(ch, RACE_WILDELF)) max = 70;
        if (IS_RACE(ch, RACE_ARCHANGEL)) max = 110;
        if (IS_RACE(ch, RACE_ARCHDEMON)) max = 110;

        return URANGE(3, ch->pcdata->perm_con + ch->pcdata->mod_con, max);
}

/* help.are */
0 RACES~
[CLASS] ------------[Ability Scores]-----------[Race Powers]----------------------]
		str  int  wis  dex  con
Human		80   80   80   80   80		SuperBerserk
High Elf	80   100  100  100  70		Infravision, Lessons, Songs, Elfsing
Gnome 		60   110  110  90   60		Airshiptravel, Infravision
HillDwarf	100  80   80   80   100		ThunderHammer, Infravision
GullyDwarf      80   80   80   80   100		ThunderHammer, Infravision
MountainDwarf   100  80   80   80   100		ThunderHammer, Infravision
DragonKind      100  100  100  100  100
Hobbit  	60   80   80   80   80
Kender		60   90   90   100  60
Drow		80   100  100  100  70		Infravision, Lessons, Songs, Elfsing
Giant		110  60   60   60   100		SuperBerserk
HalfElf		80   80   80   90   80		Infravision, Lessons, Songs, Elfsing
Ogre		100  60   60   60   100		SuperBerserk
HalfOgre	90   70   70   80   90		SuperBerserk
Minotaur	100  70   70   80   90		SuperBerserk
Goblin		60   60   60   70   60		GoblinGrenade
Hobgoblin	80   70   70   70   80		GoblinGrenade
DuergarDwarf	100  80   80   70   100		ThunderHammer, Infravision
Troll		100  60   60   60   120		SuperBerserk
HalfTroll	90   60   70   70   110		SuperBerserk
Orc		80   70   70   70   80		SuperBerserk
HalfOrc		80   70   70   70   80		SuperBerserk
Centaur		80   80   80   80   80		SuperBerserk
Wildelf		80   100  100  100  70		Infravision, Lessons, Songs, Elfsing
~

/* interp.c */
    { "gainlevel",      do_gainlevel,   POS_DEAD,                 3,  LOG_NORMAL, 0,0,0 },
    { "practice",       do_rompractice, POS_DEAD,                 3,  LOG_NORMAL, 0,0,0 },
    { "racepowers",     do_racepowers, POS_DEAD,                 3,  LOG_NORMAL, 0,0,0 },
    { "ascension",     do_ascension, POS_DEAD,                 3,  LOG_NORMAL, 0,0,0 },
    { "thunderhammer",      do_thunderhammer, POS_STANDING,                 3,  LOG_NORMAL, 0,0,0 },
    { "mistform",           do_mistform, POS_STANDING,                 3,  LOG_NORMAL, 0,0,0 },
    { "weaponenhance",      do_weaponenhance, POS_STANDING,                 3,  LOG_NORMAL, 0,0,0 },
    { "armorenhance",       do_armorenhance, POS_STANDING,                 3,  LOG_NORMAL, 0,0,0 },
    { "flameblade",         do_flameblade, POS_STANDING,                 3,  LOG_NORMAL, 0,0,0 },
    { "goblingrenade",      do_goblingrenade, POS_STANDING,                 3,  LOG_NORMAL, 0,0,0 },
    { "airshiptravel",      do_airshiptravel, POS_STANDING,                 3,  LOG_NORMAL, 0,0,0 },
    { "superberserk",       do_superberserk, POS_STANDING,                 3,  LOG_NORMAL, 0,0,0 },
    { "infravision",        do_elveninfra, POS_STANDING,                 3,  LOG_NORMAL, 0,0,0 },
    { "songs",              do_songs, POS_STANDING,                 3,  LOG_NORMAL, 0,0,0 },
    { "elfsing",            do_elfsing, POS_STANDING,                 3,  LOG_NORMAL, 0,0,0 },
    { "lessons",            do_lessons, POS_STANDING,                 3,  LOG_NORMAL, 0,0,0 },


/* interp.h */
DECLARE_DO_FUN(do_gainlevel);
DECLARE_DO_FUN(do_rompractice);
DECLARE_DO_FUN(do_ascension);
DECLARE_DO_FUN(do_racepowers);
DECLARE_DO_FUN(do_thunderhammer);
DECLARE_DO_FUN(do_mistform);
DECLARE_DO_FUN(do_weaponenhance);
DECLARE_DO_FUN(do_armorenhance);
DECLARE_DO_FUN(do_flameblade);
DECLARE_DO_FUN(do_goblingrenade);
DECLARE_DO_FUN(do_airshiptravel);
DECLARE_DO_FUN(do_superberserk);
DECLARE_DO_FUN(do_elveninfra);
DECLARE_DO_FUN(do_songs);
DECLARE_DO_FUN(do_elfsing);
DECLARE_DO_FUN(do_lessons);


/* 
 * place find_spell and do_rompractice in whatever 
 * c file you fell the inclination to place them in.
 * rom practice is, as you may have guessed it, my
 * slightly modified version of the rom do_practice
 * code.
 */
int find_spell( CHAR_DATA *ch, const char *name )
{
    /* finds a spell the character can cast if possible */
    int sn, found = -1;

    if (IS_NPC(ch))
	return skill_lookup(name);

    for ( sn = 0; sn < MAX_SKILL; sn++ )
    {
	if (skill_table[sn].name == NULL)
	    break;
	if (LOWER(name[0]) == LOWER(skill_table[sn].name[0])
	&&  !str_prefix(name,skill_table[sn].name))
	{
	    if ( found == -1)
		found = sn;
	    if (ch->pcRaceLevel >= skill_table[sn].race_level
	    &&  ch->pcdata->learned[sn] > 0)
		    return sn;
	}
    }
    return found;
}



void do_rompractice( CHAR_DATA *ch, char *argument )
{
    char buf[MAX_STRING_LENGTH];
    int sn;

    if ( IS_NPC(ch) )
	return;

    if ( argument[0] == '\0' )
    {
	int col;

	col    = 0;
	for ( sn = 0; sn < MAX_SKILL; sn++ )
	{
	    if ( skill_table[sn].name == NULL )
		break;
	    if ( ch->pcRaceLevel < skill_table[sn].race_level)
	 //     || ch->pcdata->learned[sn] < 1 /* skill is not known */)
		continue;
	    if ( ch->level < skill_table[sn].skill_level )
		continue;

	    sprintf( buf, "%-18s %3d%%  ",
		skill_table[sn].name, ch->pcdata->learned[sn] );
	    send_to_char( buf, ch );
	    if ( ++col % 3 == 0 )
		send_to_char( "\n\r", ch );
	}

	if ( col % 3 != 0 )
	    send_to_char( "\n\r", ch );

	sprintf( buf, "You have %d practice sessions left.\n\r",
	    ch->pcpractice );
	send_to_char( buf, ch );
    }
    else
    {
	CHAR_DATA *mob;
	int adept;

	if ( !IS_AWAKE(ch) )
	{
	    send_to_char( "In your dreams, or what?\n\r", ch );
	    return;
	}

/*	for ( mob = ch->in_room->people; mob != NULL; mob = mob->next_in_room )
	{
	    if ( IS_NPC(mob) && IS_SET(mob->act, ACT_PRACTICE) )
		break;
	}

	if ( mob == NULL )
	{
	    send_to_char( "You can't do that here.\n\r", ch );
	    return;
	}
*/
	if ( ch->pcpractice <= 0 )
	{
	    send_to_char( "You have no practice sessions left.\n\r", ch );
	    return;
	}


	if ( ( sn = find_spell( ch,argument ) ) < 0
	|| ( !IS_NPC(ch)
	&&   (ch->pcRaceLevel < skill_table[sn].race_level)))
// 	||    ch->pcdata->learned[sn] < 1))) /* skill is not known */
//	||    skill_table[sn].rating[ch->class] == 0)))
	{
	    send_to_char( "You can't practice that.\n\r", ch );
	    return;
	}

//	adept = IS_NPC(ch) ? 100 : class_table[ch->class].skill_adept;
	adept = 75;

	if ( ch->pcdata->learned[sn] >= adept )
	{
	    sprintf( buf, "You are already learned at %s.\n\r",
		skill_table[sn].name );
	    send_to_char( buf, ch );
	}
	else
	{
	    ch->pcpractice--;
	    ch->pcdata->learned[sn] += 5;
//		int_app[get_curr_int(ch)].learn / 
//	        skill_table[sn].rating[ch->class];
	    if ( ch->pcdata->learned[sn] < adept )
	    {
		act( "You practice $T.",
		    ch, NULL, skill_table[sn].name, TO_CHAR );
		act( "$n practices $T.",
		    ch, NULL, skill_table[sn].name, TO_ROOM );
	    }
	    else
	    {
		ch->pcdata->learned[sn] = adept;
		act( "You are now learned at $T.",
		    ch, NULL, skill_table[sn].name, TO_CHAR );
		act( "$n is now learned at $T.",
		    ch, NULL, skill_table[sn].name, TO_ROOM );
	    }
	}
    }
    return;
}




