• Уважаемые гости и новички, приветствуем Вас на нашем форуме
    Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».

    Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
    Удачи!

Готика ½ Работа с утилитой zSpy

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.818
Благодарности
5.221
Баллы
910
Смысл в этой теме таков. Вы решили побыть тестером мода или просто играете в любимый мод и хотите как-то помочь разработчикам мода в поиске ошибок, но не знаете как? zSpy вам поможет. (Будет также полезно разработчикам, которые не знают, как пользоваться ею)
Разработчики PB создали хорошую утилиту для отладки и поиска возможных ошибок, называется она zSpy, но почему-то мало кто о ней знает, или знают, но не разбирались, как работать с ней.

Скачать её можно отсюда, или взять из этой папки Gothic 2\_work\tools\zSpy
Версия из готики 2 работает под готикой 1.
Устанавливаем (распаковываем из архива) zSpy в \Gothic 2\System\
Запускаем zSpy.exe

Рассмотрим главное окно утилиты
zspy.jpg
1. Панель меню - содержит File, View, Options и Help
2. Панель кнопок - на которые вынесены основные функции утилиты
3. Рабочая область - на которой собственно и будут выводимые сообщения

1) Заглянем в меню - File
bandicam 2020-06-25 10-03-35-267.jpg
a) Save as... - позволяет сохранить наш журнал в отдельный документ
b) Print, Print Preview и Print Setup - позволяет напечатать наш журнал, сделать предпросмотр и настроить принтер
c) Copy view to clipboard - копирует текст из видимой рабочей области (копирует текст, на который мы смотрим, а он может быть в начале/середине/конце)
d) Copy last 100 clipboard - копирует последние 100 строк текста из рабочей области (копирует текст с конца)

2) Заглянем в View
bandicam 2020-06-25 10-07-43-733.jpg
a) Redraw - не работает
b) Clear Screen - очистить рабочую область
c) Autoscroll - при включении, рабочая область будет автоскролиться с новыми сообщениями ошибок/предупреждений
d) Always on top - при включении, утилита будет поверх всех окон
e) Toolbar - включает/отключает панель с продублированными кнопками
f) Status bar - не работает

3) Заглянем в Options
bandicam 2020-06-25 10-15-03-826.jpg
a) Logging - настройки по выводу различных ошибок
b) Font - настройки по шрифту
1593063207542.png
Здесь все понятно, выбираете любимый шрифт, размер, стилистику, для русского текста кодировку выбираем Кириллица
c) Colors - настройки по цветовой палитре различных ошибок
d) Find Text - позволяет искать нужный текст в рабочей области.
В открытом окне набираем искомый текст и при нажатии ОК, он будет найден и подсвечен синей линией
e) Find Next - перейти к следующему тексту (активна, при включении Find Text)
f) Remove Find-Result - очищает включенных поиск текста
g) Textfilter - позволяет задать точный вывод ошибок
В открытом окне набираем нужный искомый текст и при запуске игры, будут выводится ошибки только с ними
Примеры, SCRIPT, TEXTURE, SPAWN и прочее.
4) В меню Help будет кнопка About zSpy
При нажатии, можем посмотреть информацию об утилите, её версии и списка изменений.
На этом закончим внешний осмотр утилиты и углубимся в некоторые функции.

При нажатии на кнопку Logging (3.a) мы увидим следующее:
1593062609394.png
Раздел Categories - включает в себя категории выводимых ошибок
Informations - информация - это не ошибка, а различный текст о выполнении различных функции, которые происходят в игре (в основной части они нам не нужны, поэтому выключаем сразу), изначальный цвет в рабочей области черный
Faults - ошибка, она показывает какое-либо нарушение в функциях (часто при её выводе игра не вылетает, но исправить её обязательно)
Warnings - внимание - такого рода ошибки указывают на незначительные ошибки, игра с ними не вылетает, но исправление рассматривается разработчиком, в этой группе есть внимания, которые не влияют на игру и их можно не исправлять)
Critical Errors - критическая ошибка - эти ошибки всегда аварийно завершают игру и требуют немедленного исправления

Dynamic Show и Dynamic Hide - если включена Show - при включении игры zspy будет развернут и будет перекрывать окна, Hide - ничего этого не делает, если выключены оба, утилита будет вести себя как Hide
Remote UDP-Hosts - выключено (предполагалось, пересылка сообщений удаленно)
Disable UDP-communication - выключено

Log to file - при включении, можно задать файл, в который будет собираться вся выводимая информация (рекомендую включить её и оставить все по умолчанию)
Clear on start of application - при включении рабочая область будет всегда очищаться при запуске игры

Теперь же рассмотрим на деле, как это все работает.
Убедитесь, что вы установили PlayerKit на Готику 1 или Готику 2!
Чтобы сообщения стали пересылаться в zSpy необходимо запускать GothicStarter_Mod.exe, а не GothicStarter.exe
Если у вас установлен Ninja, то нужно запускать через GothicStarter.exe, запуск через GothicStarter_Mod.exe лишнее.
При запуске будет немного измененное окно:
1593064318434.png
Включаем оконный режим (чтобы видеть вывод сообщений), также перемешаем ползунок Сообщения zSpy с 0 до 4.
Так то вывод сообщений имеет градацию с 0 до 10, разница лишь в том, будет ли подробно сами сообщения выводится и разница заметна с включенным Information, если Information выключен, достаточно 4.
Все, теперь запускам выбранный вами мод.
Примечание, игра таким образом будет сильно отличаться, так как вывод сообщений тормозит игру!

После запуска мы видим, что появились сообщения в окне zSpy:
1593064609168.png
Разберем любую строку, чтобы понять, что она означает.
00:04 Warn: 0 C: SCRIPT: Npc_HasItems(): illegal param: "OTHER" is NULL. .... <oGameExternal.cpp,#252>

00:00 время после включения утилиты
Warn - тип ошибки, в данном случае Warning
SCRIPT - тип ошибки игровой, в данном случае ошибка в скриптах
Npc_HasItems(): illegal param: "OTHER" is NULL - означает, что функция вернула аргумент OTHER как NULL (более простым языком, аргумент в функции не действителен, нет такого NPC или он ещё не инициализирован)
<oGameExternal.cpp,#252> - из какого исходного файла произошёл вызов этой ошибки

Теперь надо понять, что полезное можно извлечь из этих выводимых сообщений.
При запуске игры, но не загружая саму игру/сохранения - эти все Warning не несут никакого вреда, поэтому их просто можно исключить из своего внимания, при условии, что нет Fault/Criitical Errors.

Запускаем саму игру.
После запуска игры мы можем наблюдать следующую картину:
1593065180502.png
Как видно, к прошлым ошибкам добавились новые. Посмотрим на что стоит обратить внимание и сообщить разработчикам
00:12 Warn: 0 B: VP: File "ADDON_TITLE.BIK" does not exist. .... <zBinkPlayer.cpp,#74>
00:12 Warn: 0 B: VP: File "ADDON_TITLE800X600.BIK" does not exist. .... <zBinkPlayer.cpp,#74>
00:12 Warn: 0 B: VP: File "ADDON_TITLE640X480.BIK" does not exist. .... <zBinkPlayer.cpp,#74>

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

00:12 Warn: 0 C: SCRIPT: Npc_IsDead(): illegal param: "KDW_140300_ADDON_MYXIR_CITY" is NULL. .... <oGameExternal.cpp,#252>
00:12 Warn: 0 C: SCRIPT: last parser func-name: INIT_NEWWORLD .... <oGameExternal.cpp,#262>

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

00:12 Warn: 0 C: SCRIPT: Wld_SetMobRoutine(): could not find a vob with name: FIREPLACE .... <oGameExternal.cpp,#252>
00:12 Warn: 0 C: SCRIPT: last parser func-name: INIT_NEWWORLD .... <oGameExternal.cpp,#262>

Эта ошибка означает, что в игровом мире нет объектов с именем FIREPLACE, поэтому движок не может управлять этим объектом - желательно сообщить авторам об этом.

00:12 Warn: 0 D: zModel(zCModelAni::ResolveReferences): Could not find nextAni: S_WALK, this:T_WALKL_2_WALK .... <zModelProto.cpp,#3352>
00:12 Warn: 0 D: zModel(zCModelAni::ResolveReferences): Could not find nextAni: S_WALK, this:T_WALKR_2_WALK .... <zModelProto.cpp,#3352>

Такие рода ошибки означают, что не найдено перехода из анимации в анимацию, их будет генерироваться много, но только некоторые из них несут полезность, поэтому если видите Could not find nextAni можете пропустить.
Обсуждение этой темы было в 2015 году и сошлись на том, что это в порядке вещей.

00:20 Warn: 0 U: AI: Output-unit DIA_Addon_Xardas_Add_14_07 not found ! .... <oNpc.cpp,#13943>
00:20 Warn: 0 U: AI: Output-unit DIA_Addon_Xardas_Add_14_08 not found ! .... <oNpc.cpp,#13943>

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

Ну и на последок
00:09 Warn: 0 B: MOBCONTAINER: Item-Instance not found: ItFo_Mutton .... <oMobInter.cpp,#2983>
Этоо означает, что в игровом мире в каком-то сундуке в контейнере указан предмет, которого в моде нет - желательно сообщить авторам (чаще всего ошибка или путаница в названиях предметов)

На этом разбор этой утилиты закончен, но добавлю лишь некоторые упоминания.
С помощью утилиты zSpy удобно выводить текст при вылете ACCESS VIOLATION и передавать его.
Если у вас установлен Ninja, то запуск через GothicStarter_Mod.exe необязателен, т.к. Ninja делает прямое перенаправление сообщений.
Если вы собрали материал ошибок и у вас был включено логирование, то проще всего скинуть файл zSpyDefault.log из папки Gothic 2\System
Для отладки мода, можно с помощью скриптов отправлять сообщения в zSpy
PrintDebug
Если используете расширитель Ikarus+Lego для отладки можно использовать MEM_SendToSpy или MEM_Warn

Описание ошибок, которые мне известны:
Класс oNpc
Название ошибки
Описание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 U: AI: Output-unit XXX not found ! .... <oNpc.cpp,#13943>00:20 Warn: 0 U: AI: Output-unit XXX not found ! .... <oNpc.cpp,#13943>Добавить файл озвучки XXX в ресурсы мода.
Если мод без озвучки, такие сообщения всегда будут генерироваться, поэтому их можно проигнорировать
Warn: 0 U: NPC XXX: EV_GOTOFP : Freepoint XXX not found. .... <oNpc_Move.cpp,#2187>NPC/Monster XXX не может найти свободный Freepoint XXXЗапоминаем место, где вышла это сообщение и в Spacer добавляем отсутствующий FP_XXX
Warn: 0 U: ITEMI: No Transition found : MAPSEALED/0/1 .... <oNpc.cpp,#13663>ошибка возникает, когда NPC/Monster использует предмет у которого есть scemeName - описание того, как нужно пользоваться предметом (Безвредное сообщение)
Warn: 0 U: NPC: Could not send PERC AssessStopMagic to npc XXX. Current State is .... <oNpc.cpp,#15216>движку не удается отправить восприятие NPC/monster XXX, возникает если жертва досрочно вышла из какого-то состояния
Warn: 0 U: NPC: No Route found :XXX\XXX (XXX) .... <oNpc_Move.cpp,#1481>NPC XXX не может добраться до своего целевого Waypoint XXX (Может отсутствовать в мире, или Waypoint не соединен)Проверить наличие waypoint в zen файле., проверить связь этого waypoint с вашей сеткой.
Количество несвязанных WP можно узнать в zen файле сохранённом в ANSI
открываем файл и делаем поиск
numWaypoints
после = будет указан сколько WP у вас не соединено.
Они пишутся как [waypoint0 zCWaypoint 0 12417], когда соединённые пишут вот так
[wayl0 zCWaypoint 0 12420]
Примечание, WP TOT не надо соединять с вашей сеткой!
Warn: 0 U: NPC XXX: EV_GOTOFP : Freepoint XXX not found. .... <oNpc_Move.cpp,#2187>Движок не может найти свободный Freepoint XXX для NPC XXXПроверить игровой мир, возможно рядом с WP либо нет FP, либо добавлено мало, чем используется в реальности
Добавить недостающие FP
Warn: 0 U: NPC: EV_USEMOB : No Mobsi with specified schemeName (XXX) found. .... <oNpc.cpp,#13267>NPC в выполнении своего распорядка дня не смог найти в поле зрения Mobinter объектПроверить куда направлен waypoint в zen файле, если есть проблемы, развернуть их в направлении mobinter объекта, также waypoint может быть расположен очень близко - чуть отодвинуть его
Warn: 0 U: NPC: InteractItem XXX not saved. .... <oNpc.cpp,#9736>используемый предмет XXX у NPC/monster не будет сохранен (безобидная ошибка)
Warn: 0 U: NPC: Ani XXX not found. Cannot draw weapon ! .... <oNpc.cpp,#11104>Не найдена анимация XXX, НПС/монстер не может выполнить действиеПроверить название анимации XXX в скриптах и в mds файле, возможно ошибка в названии анимации
Warn: 0 U: AI: No Output-unit number found: XXX.... <oNpc.cpp,#13916>У NPC XXX отсутствует голос (voice)Найти скрипт инстанции XXX и добавить его
voice =
Warn: 0 U: NPC: EV_USEITEM : No targetVob XXX found. .... <oNpc.cpp,#13544>используемый предмет был удален из рук, но событие использования все еще активно, например подметание, чтение скрижалей, то есть предмета в руках нет, а анимация еще воспроизводиться
Warn: 0 C: oCNpc : EV_CreateInteractItem: DEF_CREATE_ITEM w/o previously called DEF_INSERT_ITEM, did you forget to set a valid mobsi useOnItem string ? .... <oNpc.cpp,#13359>Как можно понять из сообщения, либо в анимациях перепутаны местами эвенты DEF_CREATE_ITEM и DEF_INSERT_ITEM, либо у Mobsi объекта отсутствует предмет для использованияПроверить анимации с этими эвентами и mobsi объекты, где генерируется эта ошибка
Класс zModel
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 D : zModel(zCModelAni::ResolveReferences): Could not find nextAni: XXX, this:XXX ... <zModelProto.cpp,#3352>отсутствует переходная анимация XXX в блоке this:XXXЕсли это новая анимация, то проверить, возможно нет перехода и добавить его
Warn: 0 D : zModel.cpp(zCModel::StartAni): Ani not found: XXX.... <zModel.cpp,#2581>анимация XXX не может быть воспроизведенаВ наборе НПС/Монстра нет нужной анимации - исключить попытку вызова анимации для НПС/монстра.
Также название анимации в скриптах должно быть прописано заглавными буквами
Warn: 0 N : MSB: Frame-Number is out of bounds (AniEvents), ani: XXX.... <zModelProto.cpp,#4016>ошибка в указании кадра в анимации XXXИсправить номер кадра в анимации XXX, перекомпилировать новые анимации предварительно удалив старые и закомментировав anims...vdf
Fault: 0 D : zModel(zCModelProto::LoadModelScript): MDS not found: XXX.MDS .... <zModelProto.cpp,#4930>Движок не может найти и назначить xxx.mds. Обычно ошибка с назначением несуществующего overlay. Например в В1 таких ошибок возникает 4 штуки.Найти ошибку в присвоении оверлея, возможно ошибка в назначении талантов для монстров, которым нельзя присвоить человеческие overlay
Или указан неверный аргумент у функции
Npc_SetTalentSkill, как пример из В1
Npc_SetTalentSkill(self,NPC_TALENT_1H,70) - неверно, должно быть Npc_SetTalentSkill(self,NPC_TALENT_1H,2)
Fault: 0 D : (zCModel::DoAniEvents): tried to give a handle to a oneShot PFX, pfx: XXX .... <zModel.cpp,#2965>
Класс zError
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 U: OVOB: SearchNpcPos failed : Not enough space.XXX.... <zError.cpp,#474>Для вставки NPC/Monster XXX мало места, поэтому он будет выкинуть в ближайшую местностьПроверить количество вставляемых НПС/Монстров в точку, если у монстров оно превышает 8, разбить на отдельные точки.
Warn: 0 U: RTN: Routine change failed: XXX .... <zError.cpp,#474>Движок не смог поменять расписание для NPC/Monster XXX, потому что он не прописан в скриптахПроверить расписание у XXX и если его нет, добавить, либо удалить перевод в этой расписание
Warn: 0 U: GUILDS: Guild-attitude-table size mismatch: Size has to be 66 .... <zError.cpp,#474>Ошибка о несоответствии массива гильдии. Количество гильдии ограничено движком в 66. Таким образом произошло смещение в классе C_GilValues в движке - из-за этого 100% пострадают какие-либо гильдии, их поведение и прочее.Вернуть массив гильдии.
С расширителем ikarus+lego/Union/AST можно увеличить массив гильдии.
Класс zSndMss
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 C: zSndMSS(zCSndSys_MSS::LoadSoundFXByIdentifier): Sound Identifier "XXX" unknown ! .... <zSndMss.cpp,#1155>Движок не может найти инстанцию в sfx.dat.
Также движок не может найти звуковой файл, если инстанция найдена.
Проверить инстанции в SFX.dat и в случае их отсутствия добавить.
Проверить названия звуковых файлов и исправить, если допущены ошибки.
Warn: 0 C: SND: PlaySound3D: SoundFile XXX.WAV has to be a mono file .... <zSndMss.cpp,#4057>звуковой файл XXX имеет формат стерео, а может быть воспроизведет только в моно. Также ошибка может возникать, когда звуковой канал переполняется (пример, в мире рядом расставлено много Sound с их радиус действия большой)Преобразовать звуковой файл в mono. Проверить радиусы zCVobSound и zCVobSoundDaytime. Если границы 6 звуков пересекаются, уменьшить радиус.
Warn: 0 C: ARGLKABARGL: (zCActiveSnd: RequestChannel): no sample found .... <zSndMss.cpp,#3367>Движок сообщает, что был переполнен звуковой каналУменьшить количество одновременных звуков в какой-либо локации
Warn: 0 C: ARGLKABARGL2: (zCActiveSnd: RequestChannel): no sample found .... <zSndMss.cpp,#3367>Движок сообщает, что был переполнен звуковой каналУменьшить количество одновременных звуков в какой-либо локации
Warn: 0 C: ARGLKABARGL2: (zCActiveSnd: RequestChannel3D): no sample3d found .... <zSndMss.cpp,#3367>Движок сообщает, что был переполнен звуковой канал (3D)Уменьшить количество одновременных звуков в какой-либо локации (3D)
Warn: 0 C: zSndMSS.h(zCWaveData: zCWaveData): Wave not found: XXX.WAV .... <zSndMss.cpp,#3947>отсутствует звуковой файл XXX.wav
Также может быть ошибка в названии звукового файла
Проверить названия звуковых файлов.
Добавить отсутствующие звуковые файлы.
Fatal:-1 C: zCWaveData::CacheIn(): could not decompress ADPCM file XXX.WAV .... <zSndMss.cpp,#3976>Движок не может прочитать звуковой файл XXXВозможно повреждение звукового файла, либо звуковой файл сделан с параметрами, которые не поддерживает движок, либо есть проблемы с аппаратным уровнем (Мог отвалиться в это время жесткий диск)
Класс oSpawn
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 U: SPAWN: Spawnpoint XXX not found. Npc XXX cannot be spawned. .... <oSpawn.cpp,#450>точка XXX для вставки предмета/НПС/Монстра XXX не найденаПроверить название точки вставки XXX, оно должно быть прописано заглавными буквами, также проверить наличие точек в zen файле, и добавить по необходимости, в противном случае - удалить
Класс oGameExternal
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 C: SCRIPT: Wld_SetMobRoutine(): could not find a vob with name: XXX.... <oGameExternal.cpp,#252>Движок не может найти объект с именем XXX, чтобы установить ему управление светомФункция используется, чтобы управлять фонарями, поэтому проверяем vobname у фонарей, которые должны управляться движком, если таким объектов нет - удалить вызов функции
Warn: 0 C: SCRIPT: Npc_IsDead(): illegal param: "XXX" is NULL. .... <oGameExternal.cpp,#252>функция возвращает значение NULL, инстанция XXX не ициниализирована
Также инстанция может быть ещё не добавлена в мир.
1. Использовать класс C_NPC, а не инстанцию в функции
2. Добавить переменную, которая будет проверять смерть НПС и которая установится в функции ZS_DEAD и заменить ее
Warn: 0 C: SCRIPT: Script tries to send trigger to XXX. Failure : vob not found. .... <oGameExternal.cpp,#252>Движок не может найти в мире Trigger с именем XXX поэтому запуск через скрипт не возможенПроверить в zen файле наличие XXX. Если имя указано с ошибкой - исправить.
Если такого vob нет, добавить его, либо удалить вызов триггер из скриптов.
Warn: 0 C: SCRIPT: Npc_KnowsInfo(): illegal param: "OTHER" is NULL. .... <oGameExternal.cpp,#252>Движок указывает на то, что глобальный класс other неправильный.Как мы знаем из скриптов. Есть 5 глобальных классов:
self, other, hero, item, victim. Так вот, использование глобального класса other вне диалогов чревато тем, что other может быть не ГЕРОЙ, поэтому функция может работать неправильно. Поэтому лучше заменить на глобальный класс hero, который всегда указывает на управляемого нами игрового персонажа.
Warn: 0 C: SCRIPT: Npc_GetDistToWP(): Waypoint XXX not found. .... <oGameExternal.cpp,#252>Движок не нашел waypoint XXX для NPC/monster XXX в текущем игровом миреНаходим в скриптах, где используется waypoint XXX и делаем проверку на уровень, если совпал - выполнять код, в противном случае нет.
Также следует проверить наличие этого WP в zen файле, если его нет - добавить, либо исправить название, часто оказываются, что в конце имени есть лишний пробел.
Warn: 0 C: SCRIPT: Npc_SendPassivePerc(): illegal param: "яINSTANCE_HELP" is NULL. .... <oGameExternal.cpp,#252>у функции по отправке восприятия неправильный аргумент.
яINSTANCE_HELP - особый указатель, который создается до создания функции движка (external), работает внутри движка.
ÿINSTANCE_HELP ('\0xFF' + ("INSTANCE_HELP" ) - вспомогательный символ парсера, который используется для хранения экземпляров Externals в качестве возвращаемого значения. В функциях он используется как 0. Следовательно Npc_SendPassivePerc(0,PERC_ASSESSWARN,other,self) или любые вариации недопустимы.

Найти функцию, которая пытается послать восприятие 0. Также возможна взаимосвязь с другими функциями, которые пытаются передать 0, NULL. Возможно в какой-то момент была ссылка на класс C_ITEM с 0, ближайший пример Одиссея до версии 2.5, когда в инвентаре были пустые ячейки предмета.
Warn: 0 C: SCRIPT: last parser func-name: XXX .... <oGameExternal.cpp,#262>Используется для наглядности, чтобы показать, из какой функции произошел вывоз проблемной функции.
(Без вредное)
Класс oGame
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Fault: 0 U: NPC: Someone has an illegal Reference to an Npc ! AAArrrrggghhhh : .... <oGame.cpp,#2016>Движок указывает, что есть ссылки на какого-то NPC, но NPC нет в мире.Ошибка может возникать при загрузке сохранения или смене мира. Случается это когда какой-то объект ссылается на NPC, которого уже нет, чаще всего это эффекты. Тут нужно смотреть комплексно, рядом с кем возникает ошибка, когда. Изучить предметы НПС. Проверить функции Wld_PlayEffect
Класс oVisFx
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 C: oCVisualFX::CreateAndPlay(): VisualFX ID XXX not found in visualfxinst.d .... <oVisFx.cpp,#1693>движок не может найти инстанцию PFX-XXX в visualfxinst.d, поэтому эффект не воспроизводитсяДобавить инстанцию pfx в visualfxinst.d, если это служебный PFX, его можно оставить пустым
Warn: 0 C: oCVisualFX :: InitEffect(): vob not in world! .... <oVisFx.cpp,#2749>означает, что у какого-то эффекта PFX нет родителя Vob, но эффект будет воспроизводится в этом месте, также ошибка возникает, когда предмет с pfx-эффектом был быстро перемещен из точки А в точку Б, а эффект остался на местеПроверить pfx-эффект в мире, если у него нет родителя, привязать его ребенком в родительскому zCVob
Warn: 0 C: VIS: (oCVisualFX :: CheckDeletion()): Visual died before spell was casted. Name: .... <oVisFx.cpp,#3352>ошибка в создании pfx-эффекта, частицы эффекта удаляются до каста заклинания (бесконечная генерация, пока идет каст заклинания)исправить время жизни pfx, возможно неверный флаг у руны/свитка
Warn: 0 C: magic-pfx could not be started: XXX.... <oVisFx.cpp,#1118>pfx-эффект XXX не может быть воспроизведен.найти XXX pfx, проверить его, возможно нет связи с какой-либо инстанцией, или ошибка в названии инстанции.
Класс zTexture
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 D: Texture not found 'XXX.TGA', using default-texture .... <zTexture.cpp,#1377>Движок не нашел текстуры XXX.tga, поэтому он использовал стандартную текстуру Default.tgaДобавить забытую текстуру .tga и скомпилировать ее
Warn: 0 C: maximum texture size is lower than 32. possible reasons: wrong gfx driver setup (install other driver), bad os state (try to reboot), or insufficient gfx hardware (buy better gfx card!) <zTexture.cpp,#1377>
Warn: X: CreateTextureTile: Unsupported DXTC format. XXX.tga <zTexture.cpp,#1377>Движок не поддерживает сжатие текстур методом DXT
Класс oMobInter
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 B: MOBCONTAINER: Item-Instance not found: XXX.... <oMobInter.cpp,#2983>Движок обнаружил, что в контейнере сундука и прочее в списке содержится недопустимый объект и он не будет добавленПроверить контейнер и исправить название инстанции предмета (если он есть в скриптах) или удалить, также может быть ошибка в перечислении, лишняя , ;
Warn: 0 U:MOBSI:No Slot ZS_SLOT found. <oMobInter.cpp,#2983>Движок не обнаружил кость ZS_SLOT у Mob объекта
Класс zMesh
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 D: z3d(zCMesh::Load): Could not load Mesh: XXX.3DS .... <zMesh.cpp,#436>модель XXX.3ds не найдена в ресурсах игры/модаДобавить забытый meshes 3DS и скомпилировать его
Также возможно, что указан неправильный visual у zCVob
Класс zProgMeshProto
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 D: zProgMeshProto ( : :Load ) : Could not load Mesh: XXX.3DS .... <zProgMeshProto.cpp,#602>модель XXX.3ds не найдена в ресурсах игры/модаДобавить забытый meshes 3DS и скомпилировать его
Также возможно, что указан неправильный visual у zCVob
Класс oAiHuman
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 C: corrected ani freezer for npc: XXX, pos: X: .... <oAiHuman.cpp,#2805>движок исправил положение NPC/монстра XXX на поверхностиБез вредное
Warn: 0 C: corrected ani freezer for player! pos: X: .... <oAiHuman.cpp,#2805>движок исправил положение Игрока на поверхностиБез вредное
Класс zBinkPlayer
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 B: VP: File "XXX.BIK" does not exist. .... <zBinkPlayer.cpp,#74>Движок не нашел видео XXX.bik
Также ошибка может возникать, когда скипаем видео до его появления
не пропускать видео, добавить видео в ресурсы мода, либо убрать его запуск из скриптов
Класс oWaynet
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 U: WAY: Ladder highpoint error (XXX/XXX).... <oWaynet.cpp,#236>Движок обнаружил, что BBOX лестницы пересекается с сеткой WPВ Spacer находим waypoint XXX и смотрим, чтобы BBOX WP не пересекали BBOX лестницы, также линия WP должна пересекать только 1.
Точнее двигаем WP, удаляем лишние пересечения и прочее.
Класс zRndD3D
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 X: [RND3D-Destructor]: Can't uninitialize D3DX Utility Library ! Error: D3DXERR_D3DXNOTSTARTEDYET .... <zRndD3D.h,#124>Движок обнаружил проблемы с устройствами отрисовки графики - Видеоадаптер, драйвера, Direct XВозможно повреждение драйверов, кривые драйвера, повреждении библиотек Direct X, аппаратная проблема с видеокартой. Возможно очень долго не перезапускали ОС (например ноутбук)
Warn: 0 X: zCSurfaceCache_D3D :: CacheOutSurface: slotindex->height out of range ! .... <zRndD3D_SurfaceCache.cpp,#188>движок сообщает, что какая-то текстура превысила максимальный размер в 2048 пикселей по высотеПеределать текстуру, уменьшив разрешение по высоте
Warn: 0 X: zCSurfaceCache_D3D :: CacheInSurface: slotindex->width out of range ! .... <zRndD3D_SurfaceCache.cpp,#116>движок сообщает, что какая-то текстура превысила максимальный размер в 2048 пикселей по ширинеПеределать текстуру, уменьшив разрешение по ширине
Fault: 0 X: XD3D_AlphaBlendPoly: xd3d_numAlphaPolys>=MAXALPHAPOLYS (Too many alphapolys) .... <zRndD3D_Render.cpp,#914>Движок обнаружил что в кадре находится слишком много объектов с мультиканаламиДвижок обнаружил что в кадре находится слишком много объектов с мультиканалами
Класс zCParser
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Fault: 0 U PAR: Unexpected End of File. (line XXX)Движок обнаружил при компиляции скриптов ошибку окончании файла.Посмотреть недавно измененные скрипты, возможно где-то забыли исправить комментарий, или указали разрыв строки неправильно, или сам коней файла указан неправильно (например Unix, вместо Windows CR LF)
Также возможно, что вы прописывали в скрипте два раза одно и тоже действие.
Еще играет важную роль формат файла - готика правильно работает только с ANSI
U PAR: Expected integer constant : XXX (line XXX)
Движок обнаружил, что используемая константа не определенаПарсер считает сверху вниз код, поэтому он не может динамически подхватывать новые переменные. Они должны быть строго определены заранее.
Пример, неправильно:
var int ZAEHLER_TALENT_1H;
oth.aivar[ZAEHLER_TALENT_1H] = oth.aivar[ZAEHLER_TALENT_1H] + percent;
У айваров используются константы, поэтому должны быть так
const int ZAEHLER_TALENT_1H = 89;
oth.aivar[ZAEHLER_TALENT_1H] = oth.aivar[ZAEHLER_TALENT_1H] + percent;
U PAR: Expected an Integer-Value : XXX (line XXX)
U PAR: Assignment: Left operand is not a lvalue (line xxx)Движок обнаружил, что происходит попытка присвоения в блоке if elseИсправить присвоение на сравнение в условии if
U PAR: Syntax Error. First letter is a digit. Instancename XXXДвижок обнаружил, что в имени инстанции первая буква - цифраИсправить название инстанции
U PAR: Syntax Error. First letter is a digit in prototypename XXXДвижок обнаружил, что в имени прототипа первая буква - цифраИсправить название прототипа
U RAP: Expected 'X' (line XX)Движок при компиляции обнаружил не закрытую функцию, забытую скобкиВ недавнем скрипте найти место и исправить - добавить ; ) }
Также ещё стоить посмотреть на тип функции, возможно в func void XXX стоят return XXX, тогда исправить функцию на func int XXX
Класс zParser_Symbol
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 U: PAR: External XXX not found. .... <zParser_Symbol.cpp,#1123>Движок обнаружил, что в скриптах используется функция, которая не определена в External.Ошибок нет. В настоящее время новые функции могут быть добавлены с помощью Union/AST/Ikarus+Lego, поэтому их нет в оригинальном External.
Если там функции GAME_INITGERMAN/GAME_INITENGLISH/GAME_INITENGINTL - то они создавались под разные языковые словари, различаются лишь использованием адресов движка с 0x6FB9A0 до 0x6FB9F3, но функции всегда возвращают 1.
Для модов всегда используем в startup_global() GAME_INITGERMAN
Класс zCPolygon
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 D: (zCPolygon::CalcNormal): Degenerate Polygon, center at: (X, X, X) .... <zPolygon.cpp,#574>Движок обнаружил в zen файл кривой полигонЧерез любой 3d редактор находим этот полигон в вашем мире по координатам и проверяем его (возможно вершины полигона не соединены), возможно сложная форма у полигона
Warn: 0 D: (zCPolygon::ClipToFrustum) too many clipped Polys in Scene .... <zPolygon.cpp,#578>
Warn: 0 D: zCPolygon::ClipToPlane: Too many clipped verts in scene .... <zPolygon.cpp,#578>
Класс oInventory
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 M: Invalid item (no name, no instance) put into inventory. Deleting it. .... <oInventory.cpp,#2967>в игровом мире (zen файл) есть предметы oCItem, которые потеряли связь со скриптами и при подборе они удаляются у игрока (Возникает такая ситуация, когда редактируется zen файл с оригинальными скриптами и сохраняется с ними)
Также ошибка возникает, когда в анимации используется предмет, которого нет в скриптах.
Потерянные oCItem предметы помещаются в папку oCItem, нормальные предметы обычно находятся в папке oCItem (zCProgMeshProto) или oCItem (zCMorph). Передобавляем все потерянные предметы, если в скриптах предмета нет - удалить.
Проверить анимации, узнать название предмета и добавить его в скрипты, либо исправить название инстанции предмета.
Warn: 0 Removing item with refcount <=1 from inventory will cause it to be deleted... <oInventory.cpp,#2967>
Warn: 0 oCNpcInventory::HandleTrade() has been called although it is obsolete! <oInventory.cpp,#2967>
Warn: 0 N: PackItemsInCategory: invalid item count - npc: XXX, item: XXX, amount: XXX <oInventory.cpp,#2967>При сохранении игрового процесса произошел сбой, из-за чего у NPC XXX сохранился предмет XXX с количеством 0Данная ошибка говорит нам о том, что в сохранении у NPC XXX в инвентаре находится предмет с количеством 0. Нужно посмотреть инстанцию этого NPC, возможно создается предмет с количеством 0. Возможна ситуация в плохой функции B_CreateAmbientInv. Возможно создание нулевого предмета есть в диалоге, нужно смотреть комплексно.
Можно исправить сохранение, достаточно изменить 0 на 1 открыв сохранение мира, в котором находится этот NPC.
Класс zObject
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 D: OBJ: SetObjectName() on shared object class 'zCTexture' failed: object with that name already exists! XXX.TGA .... <zObject.cpp,#299>
Warn: 0 D: OBJ: SetObjectName() on shared object class 'zCMaterial' failed: object with that name already exists! XXX .... <zObject.cpp,#299>
Класс oAniCtrl
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 C: draw weapon ani XXX not found! .... <oAniCtrl.cpp,#3842>Отсутствует анимация XXX чтобы НПС/монстр перешел в режим бояНайти ошибку в названии анимации в скриптах, mds файле, либо сделать исключение, чтобы НПС/монстр не переходил в режим боя
Warn: 0 U: ANI: No Stand-Ani for current Weaponmode found. .... <oAniCtrl.cpp,#785>NPC/Monster не может принять стойку боевого режимаСкорее всего ошибка вызвата тем, что для монстра не указана функция атаки Npc_SetToFistMode
Нужно проверить всех неписей и присвоить любой вид атаки.
Класс oSvm
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 U: SVM: Output-Unit "XXX" not found (XXX) .... <oSvm.cpp,#94>отсутствует в скриптах переменная и текстовая строка SVM диалога XXXДобавить в SVM.d недостающие svm-диалоги
Класс zVob
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Fault: 0 D: (zCVob::SetVisual): could not load visual 'XXX.3DS' for vobName 'XXX' of class 'XXX' .... <zVob.cpp,#2004>движок не может поставить visual XXX.3ds у объекта XXX с именем XXXЧерез Spacer находим по имени XXX объект XXX и исправляем название visual
Класс zCsCamera
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 C: (zCCSCamera :: EV_Play): autoCamPlayerMovable and autoCamUntriggerOnLastKey are both FALSE => player can't untrigger camera .... <zCsCamera.cpp,#1609>Движок обнаружил, что у камеры не настроены параметры autoCamPlayerMovable и autoCamUntriggerOnLastKeyПосмотреть настройки всех камер и исправить их параметры autoCamPlayerMovable и autoCamUntriggerOnLastKey.
Первый отвечает за возможность ходить, пока камера показывает сцену.
Второй отвечает за возвращение управления игроком после прекращения показа камеоы
Класс zArchiverGeneric
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 D: zArchiver ( : : ReadObject ) : found an objectPtr in file, tried to write this to an 'objectUseThis' .... <zArchiverGeneric.cpp,#1176>
Класс zMusic_DM
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 5 C: zMusic_DM.cpp(zCMusicSys_DirectMusic: : PlayJingle): No such motif: XXX
Класс zFILE_VDFS
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 B: VFILE: Seek -1125318516 on file XXX failed. Current position is XXX. Filesize is XXX .... <zDisk_Vdfs.cpp,#255>
Класс zBVolume
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 C: zCOBBox3D : : LoadBIN(): really many child bboxes found. probable data corruption. try to delete all _compiled data instead converting on the fly! .... <zBVolume.cpp,#2376>
Класс oCMenu_Status
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Fault: 0 B: STAT: Menuitem XXX not found .... <oMenu_Status.cpp,#418>
Класс oWorld
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Fault: 0 U: OBJ: Script-object XXX not found ! Please correct instancename ! .... <oWorld.cpp,#309>Движок сообщает, что указанная инстанция ХХХ отсутствуетПроверить анимации, возможно там используется инстанция предмета, которого нет в скриптах, или присутствуют ошибки в названиях
Класс zCCsContext
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 B: CS : Cutscene XXX has no player .... <zCCsContext.cpp,#447>
Warn: 0 B: CS: onStop-ScriptFunction not found: XXX .... <zCCsContext.cpp,#447>
Ikarus/Lego
Название ошибкиОписание ошибкиОбщие рекомендации исправления ошибки
Warn: 0 Q: MEM_PtrToInst: ptr is NULL. Use MEM_NullToInst if that's what you want.
Fault: 0 Q: [start of stacktrace]
xxxxx
Fault: 0 Q: [end of stacktrace]
такая конструкция вывода ошибок идет от пакета ikarus, в блоке между start of stacktrace и end of stacktrace описываются функции, в которых произошел вылет. До этого блока пишется функция, которую нужно рассмотреть в функциях в блокеВ примере, требуется заменить MEM_PtrToInst на MEM_NullToInst в функциях, которые указаны в блоке start of stacktrace и end of stacktrace
 
Последнее редактирование:

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.818
Благодарности
5.221
Баллы
910
Я начал создавать тему в разделе уроков, а когда создал тему, смотрю, создалась в соседнем разделе, а возможно я недосмотрел и создал в том.
Но спасибо.
 

Bdfy1223

Участник форума
Регистрация
26 Окт 2020
Сообщения
7
Благодарности
0
Баллы
55
Я начал создавать тему в разделе уроков, а когда создал тему, смотрю, создалась в соседнем разделе, а возможно я недосмотрел и создал в том.
Но спасибо.
Так что на счет этой вот строчки? а то у меня с ней ошибка идет, а что хочет- не ясно
ault: 0 D : (zCModel::DoAniEvents): tried to give a handle to a oneShot PFX, pfx: XXX .... <zModel.cpp,#2965>
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.818
Благодарности
5.221
Баллы
910
Современные движки браузеров/форумов/сайтов автоматом преобразуют текстовые смайлы в эмодзи если они есть, уследить нереально. Поправил.
 

Bdfy1223

Участник форума
Регистрация
26 Окт 2020
Сообщения
7
Благодарности
0
Баллы
55
Современные движки браузеров/форумов/сайтов автоматом преобразуют текстовые смайлы в эмодзи если они есть, уследить нереально. Поправил.
Спасибо конечно. Но я бы хотел больше узнать, в чем суть этой строки, ибо у меня в zSPY,
Fault: 0 D: (zCModel::DoAniEvents): tried to give a handle to a oneShot PFX, pfx: PFX_SCROLLMOB .... <zModel.cpp,#2965>
и соотвественно вылет
 

N1kX


Модостроитель
Регистрация
13 Ноя 2009
Сообщения
5.818
Благодарности
5.221
Баллы
910
Спасибо конечно. Но я бы хотел больше узнать, в чем суть этой строки, ибо у меня в zSPY,
Fault: 0 D: (zCModel::DoAniEvents): tried to give a handle to a oneShot PFX, pfx: PFX_SCROLLMOB .... <zModel.cpp,#2965>
и соотвественно вылет
Я уже ответил в той теме. Чтобы вылета не было играй без отладки. Ибо только разраб может пофиксить.
 

Slavemaster


Модостроитель
Регистрация
10 Июн 2019
Сообщения
1.033
Благодарности
1.792
Баллы
240
Сверху Снизу