/* Here is my do_level. I never could find one to do just like I wanted so I put this one togetehr
 * I know I don't have it in snipet format but there is not much to it. I just gave you what my files
 * say on it. I am sure you can figure it out.
 * No need to email me to tell me if you like it or not. No one ever does
 * jmikehavey@yahoo.com
 */

********** UPDATE.C *****************

void gain_exp( CHAR_DATA *ch, int gain )
{
    char buf[MAX_STRING_LENGTH];

    if ( IS_NPC(ch) || ch->level >= LEVEL_HERO )
        return;

    ch->exp = UMAX( exp_per_level(ch,ch->pcdata->points), ch->exp + gain );

    if ( ch->level < LEVEL_HERO && ch->exp >=
        exp_per_level(ch,ch->pcdata->points) * (ch->level+1) )
      {
      sprintf(buf, "You qualify for level %d.\n\r",ch->level + 1);
      send_to_char(buf, ch);
      }

}

********************** FIGHT.C ***********************

        xp = xp_compute( gch, victim, group_levels );

        if ( ch->exp >= exp_per_level(ch,ch->pcdata->points) * (ch->level+1) )
          {
          xp = 0;
          gain_exp (gch, xp);
          }

          else

        if (doublexp)
         {
          xp = xp * 2;
          sprintf (buf, "You receive {G%d{x (double)experience points.\n\r", xp);
          send_to_char (buf, gch);
          gain_exp (gch, xp);
         }
         else
         {
          xp = xp;
          sprintf( buf, "You receive %d experience points.\n\r", xp );
          send_to_char( buf, gch );
          gain_exp( gch, xp );
         }

********************* act_comm.c ***********************

/* Level */
void do_level( CHAR_DATA *ch, char *argument )
{
    char buf[MAX_STRING_LENGTH];

    if ( ch->level < LEVEL_HERO && ch->exp >=
        exp_per_level(ch,ch->pcdata->points) * (ch->level+1) )
    {
        send_to_char( "You raise a level!!  ", ch );
        ch->level += 1;
        sprintf(buf,"%s gained level %d",ch->name,ch->level);
        log_string(buf);
        sprintf(buf,"$N has attained level %d!",ch->level);
        wiznet(buf,ch,NULL,WIZ_LEVELS,0,0);
        advance_level(ch,FALSE);
        save_char_obj(ch);
    }
    else
    {
    sprintf(buf, "You do no qualify for level %d.\n\r",ch->level + 1);
    send_to_char(buf, ch);
    }
}