Часть скрипта из нашей демки. У нас будет более продвинутая(в демо, думаю, включать не будем, но в релизе всего мода будет точно), чем в обыкновенном НВН система кастомных разговоров. Сейчас я (параллельно с лтом и АИ :-) ) пишу систему разговоров. Итак, решил бросить в Базу Скриптов коротенький скриптик. Суть: он ставит любое сцществительное в родительный падеж (string RusGenetiv). Параметр nSex - род: 1 - мужской, 2 - женский, 3 - средний. Скрипт протестирован на 150 словах. Хотя, сами понимаете, русский язык сложен и этого кол-ва слов явно мало, посему если найдете ошибки, тут же сообщите. ЗЫ: сейчас пишу Dativ & Akkusativ (наряду с Genetic самые употребительные) (на немецкий манер называю - мне языки германской группы вообще в последнее время ОЧЕНЬ нравятся :-) ), подумываю над прилагательными. (просто надо грамотно реализовать стековку имени + фамилии + прозвища) ЗЫЫ: при использовании указание авторства обязательно
Neverwinter Script Source | // ПРОИЗВОДИТСЯ ОРФОГРАФИЧЕСКАЯ ПРОВЕРКА НА НЕЛЕКСИЧЕСКИЕ СОЧЕТАНИЯ // [SCRIPTED BY TARRE TALLIORNE! (TARRE@list.ru)] string OrfographieTest(string sString);
// СТАВИТ СЛОВО sWord В РОДИТЕЛЬНЫЙ ПАДЕЖ; // - ПАРАМЕТР "РОД" ( nSex ): // 1 - МУЖСКОЙ, // 2 - ЖЕНСКИЙ, // 3 - СРЕДНИЙ. // [SCRIPTED BY TARRE TALLIORNE! (TARRE@list.ru)] string RusGenetiv(string sWord, int nSex);
string ya() { return GetName(GetWaypointByTag("ya")); }
int GetIsSound(string sLetter) { int iResult = 0; //::// if (sLetter != "ь"&& sLetter != "ъ"&& sLetter != "" && GetStringLength(sLetter)==1) { iResult = 1; } return iResult; }
int GetIsVowel(string sLetter) { int iResult = 0; if (!GetIsSound(sLetter)) return iResult = -1; if (sLetter=="а" || sLetter=="е" || sLetter=="ё" || sLetter=="и" || sLetter=="о" || sLetter=="у" || sLetter=="э" || sLetter=="ю" || sLetter==ya() ) { iResult = 1; } return iResult; }
/*int GetIsSoft(string sLetter, string sNextLetter) { int iResult; if (!GetIsSound(sLetter) || ( GetStringLength(sNextLetter)!=0 && GetStringLength(sNextLetter)!=1) || GetIsVowel(sLetter)) return iResult = -1; else if (sLetter == "й") return iResult = 1; else if (sNextLetter == "ь") return iResult = 1; }*/
string OrfographieTest(string sString) { //:://///////////::// //::// ЖИ - ШИ //::// //:://///////////:://
//::// ОПРЕДЕДЯЕМ ПЕРЕМЕННЫЕ string sNew; int nZHi = FindSubString(sString, "Жы"); int nzhi = FindSubString(sString, "жы"); int nSHi = FindSubString(sString, "Шы"); int nshi = FindSubString(sString, "шы");
//::// "Жы" if (nZHi!=-1) { int nZH = nZHi; int nI = nZH + 1; string s1 = GetStringLeft(sString, nI); string s2 = GetStringRight(sString, GetStringLength(sString)-nI-1); sNew = s1+"и"+s2; }
//::// "жы"
else if (nzhi!=-1) { int nzh = nzhi; int nI = nzh + 1; string s1 = GetStringLeft(sString, nI); string s2 = GetStringRight(sString, GetStringLength(sString)-nI-1); sNew = s1+"и"+s2; }
//::// "Шы" else if (nSHi!=-1) { int nSH = nSHi; int nI = nSH + 1; string s1 = GetStringLeft(sString, nI); string s2 = GetStringRight(sString, GetStringLength(sString)-nI-1); sNew = s1+"и"+s2; }
//::// "шы" else if (nshi!=-1) { int nsh = nshi; int nI = nsh + 1; string s1 = GetStringLeft(sString, nI); string s2 = GetStringRight(sString, GetStringLength(sString)-nI-1); sNew = s1+"и"+s2; }
//::// ЕСЛИ ЗНАКОМЫХ ОШИБОК НЕТ, ВОЗВРАЩАЕМ ИЗНАЧАЛЬНЫЙ sString else sNew = sString; return sNew; }
string RusGenetiv(string sWord, int nSex) { string sGenLast; string sOsnov; string sGenetiv; string sLast = GetStringRight(sWord, 1); //::////////////////////////////////////////////////::// //::// DEBUGGING [ deleted by author at 17.07.04 ]//::// //::// SpeakDebugString(OBJECT_SELF, sLast);////////::// //::////////////////////////////////////////////////::// switch (nSex) { //:://///////////////::// //::// МУЖСКОЙ РОД //::// //:://///////////////::// case 1: //::// ПОСЛЕДНЯЯ БУКВА ЗАМЕНЯЕТСЯ if (sLast=="а"||sLast==ya()||sLast=="й"||sLast=="ь") { if (sLast=="а") sGenLast = "ы"; else if (sLast==ya()) sGenLast = "и"; else if (sLast=="й"|| sLast=="ь") sGenLast = ya(); sOsnov = GetStringLeft(sWord, GetStringLength(sWord)-1); sGenetiv = sOsnov + sGenLast; } //::// СЛОВО НЕ ИЗМЕНЯЕТ ФОРМУ else if (sLast=="е"|| sLast=="ё"|| sLast=="и"|| sLast=="о"|| sLast=="у"|| sLast=="э") { sGenetiv = sWord; } //::// В ДРУГИХ СЛУЧАЯХ СЛОВО ПРИБАВЛЯЕТ К СЕБЕ "А" else { sGenLast = "а"; sOsnov = GetStringLeft(sWord, GetStringLength(sWord)); sGenetiv = sOsnov + sGenLast; } break;
//:://///////////////::// //::// ЖЕНСКИЙ РОД //::// //:://///////////////::// case 2: //::// ПОСЛЕДНЯЯ БУКВА ЗАМЕНЯЕТСЯ if (sLast=="а") { sGenLast = "ы"; sOsnov = GetStringLeft(sWord, GetStringLength(sWord)-1); sGenetiv = sOsnov + sGenLast; } else if (sLast==ya()||sLast=="ь") { sGenLast = "и"; sOsnov = GetStringLeft(sWord, GetStringLength(sWord)-1); sGenetiv = sOsnov + sGenLast; } //::// СЛОВО НЕ ИЗМЕНЯЕТ ФОРМУ else { sGenetiv = sWord; } break;
//:://///////////////::// //::// СРЕДНИЙ РОД //::// //:://///////////////::// case 3: if (sLast=="о") { sGenLast = "а"; sOsnov = GetStringLeft(sWord, GetStringLength(sWord)-1); sGenetiv = sOsnov + sGenLast; } if (sLast=="е") { sGenLast = ya(); sOsnov = GetStringLeft(sWord, GetStringLength(sWord)-1); sGenetiv = sOsnov + sGenLast; } else sGenetiv = sWord; break; } sGenetiv = OrfographieTest(sGenetiv); return sGenetiv; } |
|