Hmmm, the one thing I noticed at first was the list of skills when you type "prac" doesn't show the skill hide. Your test character is a magic user; the code doesn't assign that skill to that class, so it won't show up in the list when you type "practice."
Your tester likely has the sneak skill at 36%; the command "sneak" doesn't have an if statement that checks the user's class, so if your tester's got the skill trained via scripts the code will allow her to perform the skill. If this isn't what your goal is regarding skill training, you'll have to throw in an if statement or some other method for checking the class and denying all those non-thieves the chance to steal their secrets.
Edit: huh, I should've scrolled up to see what the whole topic was. My mistake!
Anyways, one way you could try and solve this is actually assign every skill you want to be cross class to every single class, but throw in a check to see if the character has any training in said skill. If they have at least 1% in it, then write the line out normally. If the skill is a big fat 0, don't print out the line. For example, your above "practice" skill list would end up looking like this:
Code:
prac
You have 111 practice sessions remaining.
You know of the following spells:
arrows of fire (awful)
blindness (superb)
mount (average)
219hp 436mn 703mv>
Some players might not like this because they may not know what skills are available for them to learn. However, trainers at different guilds list what they teach using your scripts, am I right? Problem solved! And it also opens the door to hiding some skills that are very potent, giving determined (or those with way too much time on their hands) players something to search for and discover.