Heres two checks that seem to be missing from levelup
if( ch->level == LEVEL_AVATAR )
ch_printf(ch, "&RYou cannot go past level &B%d&D.\n\r", LEVEL_AVATAR );
if( ch->level == MAX_LEVEL )
ch_printf(ch, "&RLevel &B%d&R is the highest you can get&D.\n\r", MAX_LEVEL );
This may not be needed, but i find it to be a good safty feature to have put in levelup so if a imm gives a player too much exp, they can't get a immortal character with using levelup. I'm sure most wouldn't use mset exp on players, but theres sometimes it happens, then theres no restriction on it.