Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Город Мастеров _ Neverwinter Nights Aurora Toolset _ Всякого рода фишки

Автор: Tarre Talliorne Aug 11 2004, 19:36

Тема создана главнм образом для новичков, но и более опытным товарищая почитать тоже не помешает. Итак. Минимум флейма. Максимум инфы. Начну я (кто бы сомневался :-) )

1. LevelUpHenchman(). С помощью этой функции можно... повысить уровень ПС (применив ее к ПС, конечно) без распределения этим самым ПС всех плюшек. Действие фишки можно наблюдать в первой главе ХотУ. Когда в начальном диалоге (при заходе чаром малых уровней) выозникает выбор: повысить уровень самому или автомастически. Этот самый автоматический вариант и реализован с помощью LevelUpHenchman.

2. Тонкость конструкции if (condition) { . . . }.

Neverwinter Script Source
if (1) { return TRUE; }

вернет TRUE. Никогда не задумывались почему? Дело в том, что при "заявлении" условие автоматически приравнивается(==) к TRUE. TRUE в свою очередь численно равно 1 (FALSE = 0, в этом в можете убедиться, открыв nwscript.nss). Поэтому наше форма и возвращает 1. Посему
Neverwinter Script Source
if (GetLocalInt(oPC, "localInt")==1)

можно с легкостью заменить на
Neverwinter Script Source
if (GetLocalInt(oPC, "localInt"))


Не использовать в данном виде! См. пост _kaa_ и мой ответ.

3. Известно почти всем, но все же.
Neverwinter Script Source
int n1 = 1;
int n2 = 2;
int n3 = 3;
int n4 = 4;

то же, что и
Neverwinter Script Source
int n1 = 1, n2 = 2, n3 = 3, n4 = 4;

Аналогично и с float, string, effect и другими типами данных.

4. Упрощенная модель if {} else {}
Допустим,
Neverwinter Script Source
if (nA > 5)
{
nB = TRUE;
}
else
{
nB = FALSE;
}

то же, что

Neverwinter Script Source
nB = (nA > 5) ? TRUE : FALSE;


т.е. все, что до '?' - условие, все, что после вопроса до двоеточия - присвоение в случае истинности утвержения в скобках, после двоеточия - в случае ложности.

Продолжение следует. Если у вас есть то, чем можно поделиться и что заслуживает всеобщего внимания , прошу.

Автор: _kaa_ Aug 11 2004, 21:45

Цитата(Tarre Talliorne @ Aug 11 2004, 19:36)
2. Тонкость конструкции if (condition) { . . . }.
Neverwinter Script Source
if (1) { return TRUE; }

вернет TRUE. Никогда не задумывались почему? Дело в том,  что при "заявлении" условие автоматически приравнивается(==) к TRUE. TRUE в свою очередь численно равно 1 (FALSE = 0, в этом в можете убедиться, открыв nwscript.nss). Поэтому наше форма и возвращает 1. Посему
Neverwinter Script Source
if (GetLocalInt(oPC, "localInt")==1)

можно с легкостью заменить на
Neverwinter Script Source
if (GetLocalInt(oPC, "localInt"))


Ты проверь что будет для if (2) {} и вообще любого числа кроме 0 (даже отрицательного). Вернёт TRUE.
Как ты и сказал, если выражение возвращает 0 - то это FALSE, иначе - TRUE.
Чтобы понять (тем кому еще не понятно) - проще рассмотреть логическую конструкцию вне скобок.
Скажем:
Neverwinter Script Source
int i = k == 5;
вернет 1 (TRUE), если k равен 5 и 0(FALSE) в любом другом случае. Т.е. сначала вычислится результат логической операции ==, и этот результат присвоится переменной i.

Так что условие
Neverwinter Script Source
if (GetLocalInt(oPC, "localInt"))
используется для проверки на ненулевое значение локальной переменной.

Автор: Tarre Talliorne Aug 11 2004, 22:09

Destinguo, _kaa_, destinguo! Сеньк :-)

5.Давным-давно был вопрос, как убирать эффекты... Вернее, как убрать одни, скажем, визуальные, и оставить другие визуальные. Прием довольно прост и активно юзается биоповарами.
В нижеприведенной функции эффекты сортируются не по типу, а по создателю. А создателем можно сделать локальный объект. Так они и снимаются. Итак:

Neverwinter Script Source
// В ОТЛИЧАЕТСЯ ОТ СКРИИПТА В БАЗЕ ФИЛЬТРУЕТ ЭКЗЕМПЛЯР ЭФФЕКТА НЕ ПО
// ЕГО ТИПУ, А ПО СОЗДАТЕЛЮ ЭФФЕКТА (РЕКОМЕНДУЮ ИСПОЛЬЗОВАТЬ SetLocalObject)
//   [SCRIPTED BY TARRE TALLIORNE from RAGE! ]
void ActionRemoveEffects2(object oTarget, object oCreater);

void ActionRemoveEffects2(object oTarget, object oCreater)
{
    effect eEffect = GetFirstEffect(oTarget);
    while (GetIsEffectValid(eEffect))
    {
        if (GetEffectCreator(eEffect)==oCreater)
        {
            RemoveEffect(oTarget, eEffect);
        }
        eEffect = GetNextEffect(oTarget);
    }
}


Айван: МОЛОДЕЦ! good.gif Давай дальше! yes3.gif

Автор: Shad Nov 4 2004, 09:20

Вот ещё пара идентичных функций для работы с эффектами, ищет первый эффект по одному или комбинации признаков:

Neverwinter Script Source
//Проверяем наличие эффекта на объекте. Если какой-либо из
//признаков эффекта нас не интересует (тип, id спелла которым наложен
//эффект, или объект-"автор" эффекта), передаём функции значение то
//же, что и по-умолчанию
int GetHasSpecificEffect(object oTarget, int nEffectType_ID=EFFECT_TYPE_INVALIDEFFECT, int nSpell_ID=-1, object oCaster = OBJECT_INVALID);

//То же что и предыдущая, но возвращает найденый эффект
effect GetSpecificEffect(object oTarget, int nEffectType_ID=EFFECT_TYPE_INVALIDEFFECT, int nSpell_ID=-1, object oCaster = OBJECT_INVALID);

int GetHasSpecificEffect(object oTarget, int nEffectType_ID=EFFECT_TYPE_INVALIDEFFECT, int nSpell_ID=-1, object oCaster = OBJECT_INVALID)
{
   effect eEffect = GetFirstEffect(oTarget);
   while (GetIsEffectValid(eEffect))
   {
       if((nEffectType_ID== EFFECT_TYPE_INVALIDEFFECT||
            GetEffectType(eEffect)==nEffectType_ID)&&
          (nSpell_ID     == -1                       ||
            GetEffectSpellId(eEffect)==nSpell_ID)&&
          (oCaster       == OBJECT_INVALID           ||
            GetEffectCreator(eEffect)==oCaster))
       {   return 1; }
       eEffect = GetNextEffect(oTarget);
   }
   return 0;
}

effect GetSpecificEffect(object oTarget, int nEffectType_ID=EFFECT_TYPE_INVALIDEFFECT, int nSpell_ID=-1, object oCaster = OBJECT_INVALID)
{
   effect eEffect = GetFirstEffect(oTarget);
   while (GetIsEffectValid(eEffect))
   {
       if((nEffectType_ID== EFFECT_TYPE_INVALIDEFFECT||
            GetEffectType(eEffect)==nEffectType_ID)&&
          (nSpell_ID     == -1                       ||
            GetEffectSpellId(eEffect)==nSpell_ID)&&
          (oCaster       == OBJECT_INVALID           ||
            GetEffectCreator(eEffect)==oCaster))
       {   return eEffect; }
       eEffect = GetNextEffect(oTarget);
   }
   return eEffect;
}


П.С. В редакторе, без видимого ограничения на длину строк, скрипт выглядел много лутше.

Автор: Lemegeton Nov 22 2004, 20:14

Простейшая вещь, но может, кому пригодится?

Когда в модуле надо обрабатывать много кастомных свойств объектов, скрипт OnActivateItem разрастается до беспредела. Во избежание этого, в свойстве OnActivateItem пишется (примерно) следующее:

CODE
void main()
{
    object oItem = GetItemActivated();
    string tgItem = GetTag(oItem);
    object oTarget = GetItemActivatedTarget();
    ExecuteScript(tgItem, oTarget);
}


что позволяет вызвать скрипт с именем ТЭГА ПРЕДМЕТА.

Например, палка с тэгом dragon_stick вызовет (попытается вызвать) скрипт dragon_stick. Все просто. OBJECT_SELF будет указывать на того, на кого направлено свойство палки.

З.Ы. Мечтательно Пару проверочек бы влючить...

Автор: Tarre Talliorne Dec 31 2004, 17:36

По-моему это лишнее: новые скрипты жрут размер модуля, и, кроме того, в одном скрипте все более компактно, что ли. В официальной кампании есть скрипты и по 5 тысяч строк...

Автор: DBColl Jan 2 2005, 00:02

Tarre Talliorne
Если есть ХОРОШАЯ система именования скриптовых файлов, то этот способ весьма удобен, особенно, если над модулем трудится несколько скриптеров. ОБЩИЕ скрипты в таком случае получаются ВСЕ, которые стоят в свойствах мода.

Автор: Tarre Talliorne Jan 15 2005, 20:34

6.Вот как-то вот так... Помнится, с годик назад структуру switch {...} мне подробно объяснил Лекс (если я не ошибаюсь). Так вот. Тогда дело ограничилось только

Neverwinter Script Source
switch (i) {
case n1: action(); break;
case n2: second_action(); break;
}

В то время как немногим (из моих НВН-знакомых) известна одна тонкость. Дело в том, что модель свич является упрощенной моделью иф-элс. И где же здесь элс -- задатите вы резонный вопрос.
а вот оно:
Neverwinter Script Source
switch (i) {
case n1: action1(); break;
case n2: action2(); break;
default: action3();
}


Именно дефолт берет на себя инициативу в том, случае, если i не удовлетворяет ни n1, ни n2. Стоит отметить, что break; в конце действия дефолта факультативен.

Автор: Тобур Jan 25 2005, 21:37

QUOTE (Lemegeton @ Nov 22 2004, 20:14)
что позволяет вызвать скрипт с именем ТЭГА ПРЕДМЕТА.

Система тэговых скриптов включена в стандартные скрипты НВН (смотрите стандартные скрипты x2_mod_def_load, x2_mod_def_unaqu, x2_mod_def_unequ, x2_mod_def_act, x2_mod_def_aqu, x2_mod_def_equ, а так же скрипт-пример x2_it_example.nss)

Касательно моего вклада в копилку идей: поделюсь с вами тем, как на Сиале реализован банк вещей.
Сразу скажу, что описанная ситуация работает только с сервер-ваултными персонажами.
Идея основана на баге одно функции:
void DoPlaceableObjectAction(object oPlaceable, int nPlaceableAction)
Дело в том, что эта функция, не смотря на ее название, работает не только с плэйсэйблами, но и с контейнерами (улавливаете мою мысль? smile.gif )
сделав вызов с действием PLACEABLE_ACTION_USE вы можете для игрока открыть любой контейнер.
А теперь наступают трудности. Надо сделать так, чтобы контейнер не был доступен пользователю и чтобы он и предметы из него не воровались.
Заманчиво сделать контейнер-шкурку (это решает проблему доступа и воровства), но, к сожалению, все шкурки на игроке пропадают при заходе на шард.
Поэтому пришлось сделать контэйнер размером 0Х0 (т.е. по нему нельзя щелкнуть мышкой, чтобы открыть) и делать в скрипте использования контейнера вещи, помещенные в контейнер плотовыми (как и сам контейнер),чтобы их нельзя было своровать.
Способ конечно извратный, но у него есть огромное преимущество: он не использует БД и поэтому не нагружает сервер.

Автор: Lex Jan 25 2005, 21:44

так...не понял про
- 0x0. Это как? (не в смысле что это. это я знаю.)
- "сервер-ваултными" Те в сингле нельзя?

Автор: Тобур Jan 25 2005, 21:53

0Х0 - это размер предмета - пришлось создать в файле baseitems.2da новый предмет-контейнер
В сингле использовать эту фишку я особого смысла не вижу, так в нем спокойно можно пользоваться стандартной базой данных

QUOTE
Я знаю, что 0х0 это размеры вещи. Просто не знал, что движок такие размеры позволяет. Эту вещь нельзя выделить, можно только скриптово обратиться, так?


Это, конечно, баг движка, но именно он позволяет сделать предмет, который нельзя выделить и использовать (только надо предупредить игрока, чтобы он очистил от предметов 4 ячейки в левом нижнем углу 1 страницы инвентаря, т.к. хотя размер нулевой, но 4 ячейки все таки используются и исли на этом месте лежат какие-то предметы, то доступ к ним может пропасть). Смысл в том, что технически игрок носит свой сейф с собой (чем достигается высокая надежность хранения вещей), но доступ к сейфу имеет только через специальное устройство (в виде плэйсэйбла в здании банка), к которому привязаны скрипты взаимодействия с контейнером. Если на шарде есть выпадение вещей после смерти (но обычно делается так, что плотовые вещи не выпадают), то наличие сейфа, в котором ироки могут хранить ценные неиспользуемые предметы, является очень ценной функцией для них.

Для сингла я бы рекомендовал использовать шкурку-контейнер, так как , по-моему , при восстановлении игры она не пропадает.

Автор: Lex Jan 25 2005, 22:23

Я знаю, что 0х0 это размеры вещи. Просто не знал, что движок такие размеры позволяет. Эту вещь нельзя выделить, можно только скриптово обратиться, так?
Я не хочу БД юзать.

Автор: slavaz Feb 20 2005, 13:18

По просьбе DBColl'a выкладываю свои умозаключения. Надеюсь, темой не обшибся...

К вопросу о букве "я" в тулсете

Итак, есть проблема - при вводе буквы "я" в скриптах компилятор потом напрочь
отказывается работать. Логически подумаем. Для начала несколько вводных:
1) Маленькая буква "я" имеет ASCII-код 255 (знающие уже догадались, остальным разжевываю)
2) Старые реализации сишной stdlib содержат функцию char fgetc(FILE *stream);
3) Есть глобальная переменная errno сишной библиотеки stdlib

Проследим за компилятором. Считывая функцией fgetc очередной символ, он ожидает следующий символ или EOF при конце файла или ошибке. EOF принимает значение -1. Теперь возьмем букву "я", которая при выставленных всех битах имеет значение при signed char равным именно -1 (unsigned char(255) = signed char(-1)). То есть,
получая из потока букву "я" компилятор считает, что достигнут конец файла или
произошла какая-то ошибка. И ничтоже сумнявшися вываливается с сообщением об ошибке. При этом глобальная переменная errno остается равной 0 (нет ошибок, нет EOF). При написании компилятора разработчики проверяют только результат fgetc, не проверяя при этом errno. Отсюда и спотыкания компилятора. В новом тулсете и компиляторе такой проблемы уже не будет, потому что в современных реализациях stdlib fgetc возвращает уже тип int, а это четыре байта, а не один. Поэтому буква "я" будет распознаваться нормально.

С причиной реакции компилятора на букву "я" разобрались. Как исправить? Дизасемблировать компилятор, вставить проверку errno, поменять заголовок исполняемого PE-файла. Заголовок нужно будет поменять, потому что проверка на errno займет, как минимум, дополнительно пару десятков байт. Поэтому в PE-заголовке нужно будет поменять размер сегмента кода. К сожалению я не знаю формат PE-заголовка (хоть он и берет начало от pure COFF формата, с которого
начинался и линуксовый ELF-формат). Также я не знаю, как из ассемблера вызвать виндовый stdlib (достучаться к переменной errno в частности).
Подытожим, что нужно для решения проблемы:
1) Дизассемблер (решаемо - ищется в Интернете)
2) Спецификация исполняемого PE-файла (решаемо - ищется в Интернете)
3) Вызов stdlib функций из ассемблера (с трудом, но решаемо - в Интернете или методом проб и ошибок)
4) Желание (не решаемо - мне по жизни лень. Профессия обязывает)

Осталось найти на 4-й пункт пионера и проблема буквы "я" будет решена.

P.S. Мечтательно так: вот был бы тулсет OpenSource...


Автор: dumbo Feb 20 2005, 20:04

почти все умозаключения далеки от реальности(кроме, пожалуй, дизассемблера) drag.gif
но как катализатор пригодились... -> http://dumbo.nm.ru

ps. на звание пионера не претендую, бо был я там - не понравилось...

Автор: Shad Feb 20 2005, 23:37

Есть путь полегче. "я" можно назвать, например, объект, и вставлять GetName(...). Так было сделано на Сиале, ещё до моего прихода, и это работает. Если же мучить экзешник, это прийдётся делать после каждого патча...

Автор: dumbo Feb 20 2005, 23:55

этот "путь полегче" относится к, можно сказать, азам. и он не зависит от версии. да. но это же жутко неудобно! хотя, понятное дело, можно привыкнуть и пальцами ног писать скрипты... wink.gif насчет обновлений - не проблема: если это кому-нибудь будет нужно, забацаю универсальный патчер.

Автор: Shad Feb 21 2005, 01:29

Хм. Я с этим столкнулся недавно. Вообще как-то русский в скриптах не применял, при любой возможности использую язык оригинала.

Автор: slavaz Feb 21 2005, 10:56

QUOTE (dumbo @ Feb 20 2005, 20:04)
почти все умозаключения далеки от реальности(кроме, пожалуй, дизассемблера)
но как катализатор пригодились... -> http://dumbo.nm.ru


На то они и умозаключения, чтобы быть ошибочными. Если не влом отписать - кратко, каковы реалии?


QUOTE (dumbo @ Feb 20 2005, 20:04)
ps. на звание пионера не претендую, бо был я там - не понравилось...


wink.gif Без обид.
Пионеры есть и сейчас. Но именно советским - и я был. В комсомол буквально на год не успел... this.gif biggrin.gif

Автор: DBColl Feb 21 2005, 12:29

QUOTE (dumbo @ Feb 20 2005, 22:55)
насчет обновлений - не проблема: если это кому-нибудь будет нужно, забацаю универсальный патчер.

НУЖНО!!! good.gif

Автор: dumbo Feb 21 2005, 13:27

slavaz
если вкратце, то примерно так - вычитывается весь файл в буфер, потом идет разбор:

CODE

int i = 0, FLAG = 0;
char ch;
while (FLAG!=-1) {
 ch = buf[i++];
 if i > filesize
   FLAG = -1;
 else
   FLAG = ch;
 ...
}

соотв-но, когда встречается "я" (0xff), FLAG становится -1 за счет signed типов (movsx FLAG, ch) - так что это скорее косяк биоповаров.
ну а невозможность ввода русских букавок - это просто за счет проверки символов isgraph - вторая половина _ctype, как известно, пуста... так что либо заполнять _ctype значениями, скажем, _IS_PUN, либо заменить тельце isgraph на проверку char > 0x20.

DBColl
ок, как выкрою, так накатаю. только вот мне бы помогли старые версии nwtoolset.exe, clcompile(чем больше разных - тем лучше) - если есть у кого, было бы неплохо... wink.gif

Автор: slavaz Feb 21 2005, 14:06

2dumbo: МАМА родная моя! shout.gif Действительно примерно такой алгоритм? Моего уважения к биоваревцам как кодерам убавилось, ей Богу...

CODE
int i; char *tmp_buf=buf; // прирост указателя быстрее вычисления индекса в каждой итерации цикла
int FLAG=0; // хрен его знает, зачем...
for (i=0; i<filesize;i++){
ch = *(tmp_buf++);
FLAG = (unsigned int) ch; // это если уж очень надо FLAG
...
bla-bla
...
}


Я, блин, как всегда, занадто глубоко укопался... не учел человеческий фактор... swoon.gif

По поводу ранних версий тулсета - думаю, DBColl поможет... yes.gif

В любом случае спасибо, вся общественность будет тебе благодарна.

Автор: DBColl Feb 21 2005, 17:03

dumbo
Скажи, а возможно еще все-таки сделать, чтобы в редакторе скриптов было возможно печатать по-русски? Сможешь ли ты такое провернуть?

У меня есть тулсет СоУ 1.32. Дать?

Автор: dumbo Feb 21 2005, 23:42

DBColl
ты скачай и посмотри... я это сразу сделал... drag.gif

Автор: Aiwan Feb 22 2005, 00:30

dumbo э, что то я не понял! А мне ссылку? rolleyes.gif

Автор: Nokoll Feb 22 2005, 00:45

Вот нахимичел в тулсете, и получилось я попробовал поставить вместо DestroyObject, DestroyEffect!
И усё получилось эффект удаляется.

Автор: DBColl Feb 22 2005, 11:24

QUOTE (Nokoll @ Feb 21 2005, 23:45)
Вот нахимичел в тулсете, и получилось я попробовал поставить вместо DestroyObject, DestroyEffect!

Это что за новая функция такая??? smile.gif
QUOTE (dumbo @ Feb 21 2005, 22:42)
DBColl ты скачай и посмотри... я это сразу сделал...

Ого! Я уже скачал, но еще не смотрел его просто... КУЛ! РЕСПЕКТИЩЕ! 3 года существования тулсета без русского языка и ответов новичкам, что НЕВОЗМОЖНО набирать русский текст в тулсете - копируйте через буфер, УШЛО В ПРОШЛОЕ! УРА, Товарищи! good.gif clapping.gif clapping.gif

Автор: Friedrich Feb 22 2005, 22:11

[B]Прошу прошенья за флуд.
Это что, Думбо дизассемблировал nwtoolset.exe, исправил его и теперь можно русскиими буквами писать и "я" исползывать. Обалдеть! biggrin.gif good.gif biggrin.gif
//А вот я купил Си++ для чайников, сейчас вот изучаю, через сколько времени я также смогу? lol.gif

А чего биовары, этого сами не сделали?! У них ведь вообще все исходники есть?

Кстати, можно мне тоже попрыбывать принести пользу? smile.gif
Может быть это и так все знают. Скрипты можно легко и не принужденно (почти) писать и компилировать без тулсета. (Тулсет большой, на слабых машинах долго грузится, в общем иногда этот может быть полезно).
Для этого:
1. Качаем Адитор - текстовый редактор такой и устанавливаем его. (http://vlut401.narod.ru/progs/index.html, например, но не уверен что у меня последняя версия)

2. Прописываем в autoxec.bat путь к папке utils в каталоге nwn.
Что-то вроде
SET PATH=с:\games\nwn\utils;%PATH%
(Правильно написал? Вроде, усе работает? Кстати как в ХР/2К с autoxec'ом, все также? А то у меня 98-е.) Естественно, после этого нужно перезагрузить компьютер, чтобы настройки вступили в силу.

3. Запускаем адитор и идем в настройки: Edit -> Preferences
На вкладке, File types -> Еxecute в поле
File extension пишем: nss
В поле Command line: clcompile &f
Cтавим галочку Capture Output и нажимаем Add

4. На вкладке Interface -> Other убираем галочку Start in last visited directory. В противном случае скомпилированный файл будет появлятся в папке, где вы прошлый раз сохраняли файл (бага наверное).

5. По желанию и вкусу, настроить подсветку nss (файл подсветки нужно кинуть в папку с адитором) .
Усе!

Теперь можно открывать .nss-файлы aditor-ом и компилировать нажатием кнопочки Execute. Соббщения компилятуры пудут перехвачены и появятся в открывшемся снизу окошке самого aditor'a.

Может похожую штуку и другие редакторы умеют делать. Но я знаю только про этот. Надеюсь это будет хотя-бы кому-нибудь полезно.
Я вообще windows commander'ом пользуюсь и у меня nss в адиторе по F4 открываются. smile.gif
Добавлено в [mergetime]1109099859[/mergetime]
Соббщения компилятуры пудут перехвачены
мдя - это я видимо, обкурился, малость... drag.gif

Автор: dumbo Feb 23 2005, 09:48

пользуясь случаем, поздравляю всех с праздником! hunter.gif

как и обещал, забацал универсальный http://dumbo.nm.ru

Автор: DBColl Feb 23 2005, 14:17

dumbo
РЕСПЕКТИЩЕ ТЕБЕ ОГРОМНЫЙ. Ты не смотри, что мало кто отреагировал. Просто еще никто нифига не понял вокруг, ЧТО произошло wink.gif. Так что действительно готовься ловить респекты wink.gif. good.gif

Автор: Aiwan Feb 23 2005, 14:25

Хм, вот дела smile.gif Де ж ты раньше был? РЕСПЕКТ. Однозначно. yes.gif

Автор: Lexey aka Hawk Feb 23 2005, 14:47

ОФИГЕННО!!! smile.gif ГДЕ ЖЕ ТЫ БЫЛ 2 ГОДА НАЗАД? РЕСПЕКТ!!! good.gif good.gif good.gif

Автор: Tiger Greyhawk Feb 24 2005, 03:36

QUOTE (dumbo @ Feb 23 2005, 09:48)
как и обещал, забацал универсальный патчер. устраняет попытки дискриминации по отношению к русским скриптерам wink.gif 

dumbo, блин. Да за это не только памятник надо ставить! Молодец! good.gif Спасибо за сделанное. yes.gif И огроменный РЕСПЕКТ!!!
Отдельное спасибо slavaz`у за то, что натолкнул МОЗГ на эту мысль.
QUOTE (DBColl @ Feb 23 2005, 14:17)
dumbo
РЕСПЕКТИЩЕ ТЕБЕ ОГРОМНЫЙ. Ты не смотри, что мало кто отреагировал. Просто еще никто нифига не понял вокруг, ЧТО произошло . Так что действительно готовься ловить респекты

Действительно, народ революцию пропустил. И я вместе с ними. Я рад, что нахожусь на форуме с такими людьми.

Автор: Lemegeton Feb 24 2005, 10:32

dumbo: Вот это да! Это и есть ВКЛАД в развитие! (Респект +1) biggrin.gif

QUOTE
Просто еще никто нифига не понял вокруг, ЧТО произошло . Так что действительно готовься ловить респекты.

Да уж... Чертыре поста да еще и в "фишках про скрипты"... Народ же всю революцию пропустил! Срочно ссылку во все места!

З.Ы. Надеюсь, биоповара не сильно обидятся... Вообще-то дизассемблировать программные продукты не OpenSource (или любой GNU) низя (а OpenSource не нужно)...

Автор: Тобур Feb 26 2005, 18:05

Круто! Правда у меня сомнения по поводу возможных багов и использования модов в следующих версиях тулсета, но сделана действительно нужная вещь

Автор: MasterMage Mar 7 2005, 18:51

DBColl ХМ, а у меня 1.32... На вашем 1.64 пойдут мои модули?
dumbo Молодец!! Скачал я патч... Попробую... Это ж действительно переворот! Никаких тебе больше ненужных точек с тегами "YA" и проч...!!! clapping.gif clapping.gif yahoo.gif

Автор: Клемент Астилон Mar 11 2005, 22:31

Присоединяюсь. Респект good.gif

Автор: MasterMage Mar 11 2005, 22:38

А вы знаете, что можно запустить скрипт, дав его тег предмету, и когда он окажется в вашем рюкзаке, скрипт сработает. Следовательно не надо писать OnAcquiredItem.... Просто тег итема и скрипта одинаковые... smile.gif


Lemegeton:
"Да. Это делают дефолтные x2_mod_ - скрипты. Только они это скрипт будут запускать не только OnAcquiredItem но и OnUnAcquiredItem, onEqup, onUnEquip, onActivate..." © by Friedrich

Более подробно о Tag-based скриптах можно узнать в Lexicon

Lexicon > Lyceum > Tutorial > Beginning Scripting > Grimlar - Introduction To Tag Based Scripting

"вообще, tag-based скрипты - правильная штука(все поведение предмета описывается в одном скрипте), особенно если сравнивать это с кучей "if(GetTag(oItem)){...}" обильно развешанных во всех модульных скриптах... " (с) by dumbo

Все остальные посты по обсуждению этой темы удалены.

Автор: 2_advanced Sep 12 2005, 03:54

http://nwvault.ign.com/View.php?view=other.Detail&id=942. позволяет делать автопатчеры для хаков (хаков/модулей и т.п.)
нет времени на доработку =(

Автор: 2_advanced Sep 17 2005, 14:33

http://nwvault.ign.com/View.php?view=Other.Detail&id=54344&id=942

Автор: Aiwan Sep 17 2005, 20:11

Очень аккуратно пользуйтесь функцией

Neverwinter Script Source
void SetCutsceneMode(
    object oCreature,
    int nInCutscene = TRUE
);

На днях лишний раз SetCutsceneMode FALSE привело к тому, что РС стал в режиме бога и не уязвим для повреждений. Промучался пол дня, пока нашел бяку...

Автор: NedWarN Sep 20 2005, 02:31

Несложный но интересный способ установления камеры, без констант.
Задаём переменную.
[NSS]float x=0.0f; \\ Движение по оси Х
float y=0.0f; \\ Зум, по оси У
float z=0.0f;\\ и Конечноже ось Z [\NSS]
-----------------------------------------------
Осталось только применить Переменную, и камера установлена.
[NSS] x=13.9f;
y=14.9f;
z=15.9f;[\NSS]

Автор: Aiwan Sep 7 2006, 19:00

Известно, что патчить сейвы низя... НО. Если компильнуть все скрипты модуля и впихнуть nss ncs в хак, то модуль будет работать на скриптах их хаков. Теперь достаточно исправить патем 5-10 скриптов, кинуть их исходники и компельнутые файлы в хак например аддонюхак и все. СЕЙВ БУДЕТ БРАТЬ УЖЕ ИСПРАВЛЕННЫЕ СКРИПТ. Проверял тока что. Это конечно по большей степени качается сингловиков... Но все же. ВОЗМОЖНО ЧТО ТО МОЖНО И С ЛОКАЦИЯМИ ТАК И С ДИАЛОГАМИ... Я пока не проверял. Кому нефик делать, проверьте и скажите. smile.gif

Автор: Lex Sep 7 2006, 19:17

можно. я те еще в начале года об этом говорил:
http://www.city-of-masters.ru/forums/index.php?showtopic=2162
можно все ресурсы в хак и сейвы соот. тоже содержать изменения будут.

Автор: Aiwan Sep 17 2006, 11:31

Я мучался чтолько лет не зная, что РС в режиме катсцене может просто ходить пешком, раньше я налаживал эффект замедления. Оказалось при команде

NSS
// The action subject will move to lDestination.
// - lDestination: The object will move to this location.  If the location is
//  invalid or a path cannot be found to it, the command does nothing.
// - bRun: If this is TRUE, the action subject will run rather than walk
// * No return value, but if an error occurs the log file will contain
//  "MoveToPoint failed."
void ActionMoveToLocation(location lDestination, int bRun=FALSE)

РС идет нормальным пешком... Смешно и обидно. Столько парился в катсценах smile.gif

Автор: Lamonde Dec 20 2008, 23:34

Сегодня заметил, что:

У PC появилась собственная шкурка. Раньше ее требовалось создавать в инвентаре и одевать на персонажа, теперь же она есть и носит гордое название "PC Properties". smile.gif
А выяснилось это вот каким образом. Создал шкурку, решил ее нацепить на персонажа. Запускаю, одеваю шкурку и в логе читаю "Item swaped out". Открываю инвентарь, лежит "шкурка" игрока. smile.gif

Автор: Aiwan Dec 21 2008, 14:46

Ну, решили что хватит через зад использовать шкуры животных, вдруг гринписовцы заявят на разрабов и сделали шкуру для РС smile.gif

Автор: Lamonde Dec 21 2008, 18:03

Цитата(Aiwan @ Dec 21 2008, 15:46) *
Ну, решили что хватит через зад использовать шкуры животных, вдруг гринписовцы заявят на разрабов и сделали шкуру для РС smile.gif
Если бы они еще оставили опцию класть шкурку в инвентарь (через тулсет), было бы шикарно.

Автор: Ogneslav Dec 21 2008, 19:51

Цитата
"PC Properties"


Тоже нашел эту шкурку)
оказывается она нужна для езды на лошадях(если я правильно понял)

Автор: Ilerien Dec 22 2008, 00:45

Шкурка эта создана с единственной целью - чтобы чары, сделанные до 1.69, могли ездить на лошадях. Мерзавцы-биовари запихали её в спеллхук, так что не удивляйтесь, что она в инвентарь при касте спеллов падает smile.gif Причём она создаётся до 30 раз при касте любого спелла wacko.gif

Автор: Lamonde Dec 22 2008, 13:19

Цитата(Ilerien @ Dec 22 2008, 01:45) *
Шкурка эта создана с единственной целью - чтобы чары, сделанные до 1.69, могли ездить на лошадях. Мерзавцы-биовари запихали её в спеллхук, так что не удивляйтесь, что она в инвентарь при касте спеллов падает smile.gif Причём она создаётся до 30 раз при касте любого спелла wacko.gif
Получается, что вешать переменные на нее бессмысленно? (раз она уничтожается и дается по новой или, что то не так понял?)

Автор: Ogneslav Dec 22 2008, 14:37

Может я ошибаюсь конечно, но помоему скриптом можно шкурку повесить и на место "укуса"??

Автор: Ilerien Dec 22 2008, 21:43

Цитата
Получается, что вешать переменные на нее бессмысленно? (раз она уничтожается и дается по новой или, что то не так понял?)
Это надо подробнее смотреть скрипты биоварей, насколько я помню, шкурка эта, если есть в слоте, то не убивается. Я рекомендую просто локалку X3_NO_SHAPESHIFT_SPELL_CHECK на модуле выставить в 1. Если лошади в модуле не используются, то этого должно хватить smile.gif
Цитата
Может я ошибаюсь конечно, но помоему скриптом можно шкурку повесить и на место "укуса"??
Не налезет.

Автор: Ogneslav Dec 22 2008, 22:12

Цитата
Не налезет.

А если в 2da создать отдельный вид шкурки и в параметре слота указать ... ну вообщем я не помню какая это цифра, но "укус" declare.gif ???

Автор: Ilerien Dec 22 2008, 22:41

Да можно хоть саму шкурку изменить в 2да, чтобы налезала, только надо учесть, что итемы в этим слотах используются в качестве природного оружия существа. Сам никогда не пробовал этим заниматься, надо тестить smile.gif

Автор: Ogneslav Dec 23 2008, 19:17

Цитата
итемы в этим слотах используются в качестве природного оружия существа


В смысле свойства, которые будут вешаться через редактор будут такие-же как для "укуса"??
Если да, то это ненужная трата времени(

Автор: Deirel Mar 21 2009, 21:05

Народ, никто не подбросит идею, как сделать расписание по часам для мобов? Я знаю, что эта тема уже поднималась, но найти не смог...

Автор: Lex Mar 22 2009, 11:11

http://nwnmod.narod.ru/stat_anim_npc2.htm
вместо рандомного выбора ActionSet будет функция, которая на основе времени и каких-либо еще параметров будет этот ActionSet выбирать. Собсна эта функция и будет расписанием.

совет: Если все действия выполняет на 1 локации - проблем нет. Если же нужно чтобы ночью ходил домой и тд - советую не заморачиваться с "честным" движением домой, ибо в последних версиях НВН этот механизм переработали и он стал какой-то кривой. Лучше этот эффект эмулировать, телепортируя домой нужных НПС, когда игрока нет на карте. Если игрок в этот момент дома у НПС, можно НПС кидать к двери, имитируя приход. Если же игрок в другом месте - смело кидай НПС куда нужно.

Автор: Deirel Mar 22 2009, 11:44

Спасибо!=)

Автор: DNAlchemist Oct 21 2011, 07:37

Забавная вещь, при использовании действия ActionMoveToObject, если персонаж начинает движение без присутствия игрока на локации, он не ищет путь от точки а к точке б, а идет... Оо... напролом. Потом застревает, судя по логам и минусовой координате по оси высоты в его векторе, к примеру, в тайле с деревом. Сначала хотел использовать проверку, есть ли игрок на локации, потом телепортировать NPC, вместо того, чтобы его двигать. Но потом решил просто модифицировать скрипт WalkToWaypoint. Не буду его выкладывать, по скольку модифицирован он для моих нужд
Так будет полезно знать, что если вы захотите, чтобы внезапно какой нить нписюшник, далеко от игрока, захотел сходить за пивом, нужно либо немножко поломать голову, либо сделать так, чтобы на его пути не было препятствий)

Автор: Flaristan Oct 21 2011, 14:42

А ActionForceMoveToObject не спасает?

Автор: denis0k Oct 21 2011, 16:32

Зачем что-то делать без игрока на локации? В этой ситуации все скрипты должны останавливаться, иначе это напрасная трата ресурсов и, при расширении модуля, кандидат на лаги. Либо запоминать позицию, либо сразу телепортировать, но без игрока аи должен быть выключен, ибо десяток таких "живых" локаций - и привет тормозам.

Автор: Melisse Oct 21 2011, 16:45

Вирусман говорит что вырубается аи в локах, где нет игрока.
А, кстати, нпс и вправду плохо ищут путь, если в пределах экрана нет игрока, грубо говоря игрок на них не смотрит)
Мне кажется тут происходит глюк с тайлсетовской walkmesh и pwk у плэйсов, по идеи они должны накладыватсья и общитываться, где не проходимые, а на самом деле часто очень глючат.

Автор: DNAlchemist Oct 21 2011, 18:21

Цитата(denis0k @ Oct 21 2011, 17:32) *
Зачем что-то делать без игрока на локации? В этой ситуации все скрипты должны останавливаться, иначе это напрасная трата ресурсов и, при расширении модуля, кандидат на лаги. Либо запоминать позицию, либо сразу телепортировать, но без игрока аи должен быть выключен, ибо десяток таких "живых" локаций - и привет тормозам.

Конечно я проверил ForceMoveToObject.
Десяток таких локаций не тормозят - проверено. Тормозят неграмотно сделанные циклы, и прочая нечисть. Зачем что то делать? Мне нужно чтобы нпсюшник двигался, и относительно времени оказывался на определенной точке, а игрок может войти в любой момент.
Мне же не надо этот скрипт на всех вешать.
Я поэтому и выложил сюда во всякого рода фишки, так как этот баг показался мне занятным. Вектор выдает во время столкновения объекта с препятствием минусовую координату.

по оси z

Автор: greye Oct 21 2011, 18:27

Цитата(DNAlchemist @ Oct 21 2011, 19:21) *
Мне нужно чтобы нпсюшник двигался, и относительно времени оказывался на определенной точке, а игрок может войти в любой момент.

Так и посчитай эту точку на входе игрока, не трогай непися в отсутствие человека.

Автор: denis0k Oct 21 2011, 19:28

Цитата
Вирусман говорит что вырубается аи в локах, где нет игрока.
Там в скриптах стоит заглушка - если игроков нет, то сразу return. Но события-то типа перцепшена, хб и прочих всё равно срабатывают и запускают свои скрипты, хоть они сразу и выходят.
Цитата
Мне нужно чтобы нпсюшник двигался, и относительно времени оказывался на определенной точке, а игрок может войти в любой момент.
Поясняя мысль greye, могу добавить, что для этого достаточно скорость умножить на время. Как в 5м классе smile.gif Более того, если пофилософствовать, тут по сути нпс Шрёдингера smile.gif Игрока в локе нет, а значит он не может однозначно утверждать, где он должен быть при его входе и будет ли вообще smile.gif Что как бы делает возможным вариант пихать их хоть рандомно, на общую картину не особо повлияет.

Автор: DNAlchemist Oct 21 2011, 19:41

Поясняя мысль greye, могу добавить, что для этого достаточно скорость умножить на время.
Об этом тоже думал. А если координата попадет на, например, воду? Или нписюшник в доме застрянет?
Ну не, рандомно - это не наш метод)

В общем, вычисляю путь виртуально, если падает под землю - смещаю на соседний тайл и вытаскиваю. Сойдет -___-

Если падает при респауне*

Автор: denis0k Oct 21 2011, 19:48

Если хочется так уж подробно смоделировать. В каждом доступном тайле на пути поставить по вейпоинту, пронумеровав их по порядку и примерно соблюдая дистанцию. Засечь, сколько времени нпс идёт между точками. Посчитать, сколько в локации не было игрока и при его заходе высчитать, сколько тайлов прошёл нпс и, стало быть, куда его кидать.

Автор: greye Oct 21 2011, 19:50

Цитата(DNAlchemist @ Oct 21 2011, 20:41) *
Об этом тоже думал. А если координата попадет на, например, воду? Или нписюшник в доме застрянет?

Биовари были не глупыми: почти все операции с расположением объектов ищут свободное место в радиусе 20.0 (2 тайла) от точки. Конечно, не очень приятно, если постоянно будет проводиться такой поиск, если вблизи нет подходящих точек, но в среднем терпимо.

Автор: DNAlchemist Oct 21 2011, 20:37

Цитата(denis0k @ Oct 21 2011, 20:48) *
Если хочется так уж подробно смоделировать. В каждом доступном тайле на пути поставить по вейпоинту, пронумеровав их по порядку и примерно соблюдая дистанцию. Засечь, сколько времени нпс идёт между точками. Посчитать, сколько в локации не было игрока и при его заходе высчитать, сколько тайлов прошёл нпс и, стало быть, куда его кидать.

У меня то же самое по сути, только объектов меньше для этого нужно) высчитывается относительно скорости и времени путь, затем считаю локацию относительно последнего пройденного вейпоинта.
Все равно я этим биоварем не доверяю... вдруг баг всплывет. Двойная проверка не будет лишней)

Автор: Anakondar Nov 29 2011, 23:52

У одного меня так работает или это известная фича? Нет ли в ней известных багов?

Для некоторых видов кравта использую "врЕменные" айтемы, созданные копиобджектом на инвалид локейшен, а затем этим же скриптом дестроятся. И не нужно придумывать каких-нибудь невидимых, недоступнтых или расположенных в скрытых областях контейнеров.

Автор: denis0k Nov 30 2011, 07:32

Ну работает, значит работает smile.gif Просто лично мне не приходила в голову идея крафта, где надо применять временные итемы. Только при смене внешнего вида доспеха, но там для наглядности его всё равно надо было на персонаже держать, невидимых контейнеров а-ля фоллаут не было.

Автор: Melisse Dec 10 2011, 22:41

Может быть, знакомая многим, но все же

string stext = "Я упала с самосвала\n";
+stext = "Тормозила\n";
+stext = "Головой\n";

Выглядеть будет визуально в чате или в описание вещи так:

Я упала с самосвала
Тормозила
Головой

т.е. \n - это перенос строки типа Enter при печати в блокноте
мне долго была не известна эта фишка =)

Автор: PaiNt Dec 11 2011, 01:53

А еще помойму в нвнСкрипт есть регулярные выражения но я правда, как не старался в этом не разобрался - и забил.

Автор: denis0k Dec 11 2011, 13:03

Это стандартный символ переноса строки. У меня в нвн он кстати не работал, по крайней мере в районе патча этак 1.64.

Автор: Ilerien Dec 11 2011, 13:53

Цитата
А еще помойму в нвнСкрипт есть регулярные выражения но я правда, как не старался в этом не разобрался - и забил.
Есть, но кастрированные. Функции, работающие с listen pattern'ами. Я их юзать перестал после появления onPlayerChat эвента.

Автор: PaiNt Dec 12 2011, 03:09

Цитата(Ilerien @ Dec 11 2011, 20:53) *
Есть, но кастрированные. Функции, работающие с listen pattern'ами. Я их юзать перестал после появления onPlayerChat эвента.

Вообще обобщая все это восхищаешься какие крючечки в свое время, очень давнее, стремились сделать в нвн, поидее.. если помечтать можно было замутить крутые семантитеские движки которые могли бы воспринимать слова, фразы с разными формами и сочетаниями, как яндекс..

Автор: denis0k Dec 12 2011, 07:27

Ну как бы даже профессионалы в области лингвистики ещё не изобрели бота, которого человек в разговоре воспринимал бы как настоящего человека. Была однажды статья на хабре, что некие студенты спутали некого супербота с человеком, но, во-первых, то были программеры, а подобные задроты и переписываются по алгоритмам, сами напоминая ботов, а во-вторых, случай был единичный и стабильного повторения не вызвал (т.е. эксперимент провален).

Варианты создания более менее свободных диалогов в играх тоже как-то не увенчались успехом. Наверно потому, что работают такие системы на базах данных, содержащих тысячи слов и бессчётное множество вариантов их применения, и такая бд будет больше самой игры имхо smile.gif По крайней мере в плане трудозатрат точно. К тому же, такую игру уже не локализуешь, отдельный язык - отдельная полноценная база. Максимум, что видел - это возможность ввести слово-два в заранее заготовленных диалогах (вроде в фоллауте было) и слова-теги, которые добавляются в базу знаний персонажа и на которые у неписей есть реплики (система диалогов морровинда).


Самое амбициозное на эту тему, что я слышал в кругах нвн, - парсер чата, автоматически определяющий отыгрыш и выдающий за каждую "ролевую" фразу опыт. Какое счастье, что это не реализовали, когда я играл.

Автор: PaiNt Dec 12 2011, 16:05

Вообще еще подобная система (гибридная по сравнению с мором (хотя и там втречались варианты диалогов)) была в Wizardry 8

Цитата(denis0k @ Dec 12 2011, 14:27) *
Самое амбициозное на эту тему, что я слышал в кругах нвн, - парсер чата, автоматически определяющий отыгрыш и выдающий за каждую "ролевую" фразу опыт. Какое счастье, что это не реализовали, когда я играл.

У Вируса одно время же была система РП-индекса, котороая судя по всему в в общем расчете тоже подобную часть учитывала.

Автор: Flaristan Dec 14 2011, 07:43

По-моему она просто считала отношение времени проведенного персонажем в игре к режиму боя. smile.gif

Автор: Talarasha Mar 11 2012, 02:58

Галка Left Lootable Corpse очень странно влияет на набор опций SetIsDestroyble(). Изначально у непися срабатывают выставленные опции, но стоит загрузить сейв модуля (!), и все декоративно-умершие NPC превращаются в ограбляемые трупы. Причем у меня еще и перестали работать скрипты оживления этих декоративно-умерших. Целый час времени убил, пока нашел проблему =/

Автор: noszone Apr 26 2018, 08:46

Доброго времени суток, подскажите пожалуйста, очень нужна помощь по вопросу.

При играх на шардах при отмене превращения формы или сразу переход из одной формы в другую (класс оборотень) появляется микролаг (вся игра фризится). Длительностью от 0.5 до 2 сек. Можете пожалуйста сказать, с чем это может быть связано? Записал видео даже - https://youtu.be/XHa12SvMI4U.

Почему я думаю, что дело в скриптах, потому что на одном из шардов такое не наблюдается вообще (на всех остальных всегда есть микролаг, в одиночной, разумеется лага нету). Вне зависимоти от пинга. Есть доступ к модулю, но не знаю куда копать. Помогите плиз, куда копать.

Автор: denis0k Apr 26 2018, 18:17

Это не совсем скрипты, скрипты на сервере, а это клиент виснет. Графический лаг на смене формы - это недозагруженные анимации как правило, но лагать должно всего один раз для каждой новой формы. Должно по крайней мере, кажется кони не у всех работали гладко, а там тот же полиморф.

Если есть возможность сравнить модули, то надо смотреть:
- скрипт входа игрока (лошади из 1.69 там как раз делают прелоад анимации) - он в свойствах модуля
- скрипт полиморфа (его придётся поискать в ресурсах, он скорее всего шаблона x1_s?_*, x1 - первый аддон, шифтер вроде оттуда, s0/s1/s2 - спеллы и абилки)
- хаки, может там кастомные модели или кастомные анимации

Автор: noszone Apr 28 2018, 07:37

Большое спасибо, что ответили. Шард без хаков. Теперь понятно. На том шарде где раньше играл, там лошадей не было. А на этом есть. Получается прикол в них. А можно как-нибудь обмануть систему эту?

Чтобы на шарде не лагало (доступа к модулю нет, где лошади работают), т.е. что-нибудь сделать с клиентом, с анимациями? Получается, если логически думать, если лагает, то анимация с сервера каждый раз грузится? И клиент не при чём? Подскажите пожалуйста, есть ли какие-нибудь идеи, что можно сделать с клиентом?

На том шарде, где нет лошадей, от них админы отказывались, говорили, что много проблем с ними. Теперь ясно. Благодарю за помощь.

Автор: denis0k Apr 30 2018, 18:18

Хм... Сайт иногда перестаёт грузиться, мог ответить на пару дней раньше.

Загрузка имеется в виду в память с диска, а не с сервера. Там с лошадьми хак простой - на входе (пока ещё не отрисовалась первая локация) скрипт быстро ставит вид лошади, а потом обычный. С полиморфом такой фокус вряд ли сработает, т.к. все формы перебрать мне не представляется возможным. Да и лагать должно только один раз на форму даже без дозагрузки, а не постоянно.

Рекомендую опросить других игроков, мб проблема чисто на клиенте. Насколько я помню, лошади у некоторых всё равно лагали, от компа зависит. Нвн вообще сильно от железа зависим. А ещё раньше была беда с вылетами при атаке из невидимости, и тоже проблема была в анимации, лечилось заменой на старую, до 2-го аддона.

Автор: noszone May 5 2018, 09:19

Интересно, что админ шарда не смог вообще никак воспроизвести мою проблему и закрыл тикет, заявиви что это не баг нвн. При чем у него на лаптопе древней чем мой комп (п4) идёт вообще без лагов. У него лицензия на нвн. Получается проблема не в железе, и не в скриптах нвн или анимациях. Но, почему эе тогда когда рядом со мной лошадь, то лага вообще нет. Упоротый админ. Я ему всё расписал, а он всё равно говорит, что не при делах.

Автор: denis0k May 6 2018, 12:48

К сожалению, это реально, в нвн - в особенности. Я играл с 2004-го на куче железа и с кучей людей, проблемы были постоянно, и проблемы часто разные у разных людей.

- Было время, когда у части владельцев карт нвидиа вместо меню был чёрный экран.
- До сих пор у некоторых (вообще непонятны критерии) игра падает при атаке персонажа из инвиза.
- До сих пор у меня на ноуте игра не запускается с первого раза.
- До сих пор у некоторых (снова нет локализации бага) игра падает, если на входе в локацию есть вода. А если тут ещё и автосейв кампании - вообще швах. Половина комментов стима к версии ЕЕ этим завалена.
- Всё известное мне время игра у 99% лагала при включении звука Rad 3d. И все 7 лет официальной поддержки никто не почесался.

И таких фишек навалом, просто вам не повезло иметь комбинацию железа и софта, от которых полиморф лагает. В случае с нвн, кстати, старый комп лучше нового - какой-нить п3-п4 + жефорс4 + вин хр.

Честно говоря, биовари так себе программисты. Оптимизаций нет, юникода нет (даже в более новых играх его не было), вечные проблемы с новым железом. Это не только в нвн, и котор стал падать прямо с вин7 (но фанаты запатчили), и первый ведьмак (движок нвн1) на вин10 стал глючить. ДЭ2 до первого патча у половины игроков не сохранялся, а Инквизиция вообще выдавала чёрный экран, в первый день были тысячи возвратов (я лично возвращал деньги, т.к. был в числе неудачников). А что творилось на релизе Андромеды... Это словами не передать, я на пс4 начал играть после месяца патчей, и то нарывался на баги.

Автор: Melisse May 8 2018, 08:27

Цитата
До сих пор у некоторых (вообще непонятны критерии) игра падает при атаке персонажа из инвиза.

почему не понятны? - понятны, это из-за анимации "выход персонажа из инвиза", а точнее момент когда он становится прозрачным/непрозрачным/невидимым/видимым
Да ее поправили в 1.68, но дело в том что потом добавили в 1.69 анимации персонажей дополнительные на основании анимаций 1.67 и баг мягко переехал в 1.69, где он живет и по сей день. Особенно глючат так "лошадиные анимации" персонажей.

Автор: denis0k May 8 2018, 16:20

Причина-то понятна. Не понятно, почему у некоторых падает, у некоторых - нет. По моим старым наблюдениям это даже не было связано с производителем видеокарты - (не) падало и у нвидиа, и у ати/амд.

Автор: noszone May 10 2018, 07:27

По-моему тогда проще играть другим классом где нет шифтинга форм. Интересно также посмотреть будет ли этот баг если превратиться в кого-нибудь с пмощью заклинания 9 круга.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)