Класс можно запретить, впрочем как и расу. Есть простой скрипт (правда он для нвн1, но думаю адаптировать под двойку будет просто), если игрок выбирает не то что ты разрешил, ему будет сообщение и весь опыт вернется назад. Для того, что бы это сделать на уровне движка нужны серьезные познания и умения работы в нем.
Скрипт запрещает классы в модуле. Годится для сингла. Для шардов надо придумать как описать РС. Ставится это добро на OnPlayerLevelUp модуля.
Neverwinter Script
//:://////////////////////////////////////////////
//:: OnPlayerLevelUp "am_mod_levelup"
//:: Copyright © 2005 WRG!
//:://////////////////////////////////////////////
/*
Скрипт запрещающий использование выборочных
классов в модуле. Спасибо Dumbo за упрощенную
форумулу, моя была в пять раз больше =).
*/
//:://////////////////////////////////////////////
//:: Created By: Aiwan
//:: Created On: 20.09.2005
//:://////////////////////////////////////////////
void main()
{
object oPC = GetFirstPC();
int iHit = GetHitDice(oPC); // Берем уровень игрока
int iXP = GetXP(oPC); // Вся ХР игрока
string sClass; // Для сообщения игроку что он сделал неправильно
int iClass2 = GetClassByPosition(2, oPC); // Второй класс мультикласса
int iClass3 = GetClassByPosition(3, oPC); // Третий класс мультикласса
int F = CLASS_TYPE_FIGHTER; // Воин
int R = CLASS_TYPE_ROGUE; // Вор
int D = CLASS_TYPE_DRUID; // Друид
int P = CLASS_TYPE_PALADIN; // И так далее...
// Для примера классs: Если Воин, Вор, Друид, Паладин
if ((iClass2==F || iClass3==F) || (iClass2==R || iClass3==R)
|| (iClass2==D || iClass3==D) || (iClass2==P || iClass3==P))
{
if(iClass2==F || iClass3==F) sClass = "Воин";
if(iClass2==R || iClass3==R) sClass = "Вор";
if(iClass2==D || iClass3==D) sClass = "Друид";
if(iClass2==P || iClass3==P) sClass = "Паладин";
// Присвоим РС в начале ХР на уровень меньше, значит заберем один
// уровень, что мы запретили из использования. Дальше, мы возвращаем
// назад всю нашу ХР, ведь ХР может быть намного больше чем мы
// потратили на поднятие уровня.
SetXP(oPC, (iHit*(iHit-1)*500)-((iHit-1)*1000));
DelayCommand(0.5, SetXP(oPC, iXP));
// Можно так сообщить, можно что-то другое.
SendMessageToPC(oPC, "Вы использовали запрещенный класс: "+sClass);
/*
Тут можно вписать что-нибудь из эффектов, для острастки.
*/
}
}