Уважаемые гости и новички, приветствуем Вас на нашем форуме
Здесь вы можете найти ответы практически на все свои вопросы о серии игр «Готика» (в том числе различных модах на нее), «Ведьмак», «Ризен», «Древние свитки», «Эра дракона» и о многих других играх. Можете также узнать свежие новости о разработке новых проектов, восхититься творчеством наших форумчан, либо самим показать, что вы умеете. Ну и наконец, можете обсудить общие увлечения или просто весело пообщаться с посетителями «Таверны».
Чтобы получить возможность писать на форуме, оставьте сообщение в этой теме.
Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Ну так собственно все. Если ты оперируешь только именами, то у тебя есть ряд ограничений в их подборе. Хотя бы эстетический. А метки мало того, что позволяют всегда сохранять оригинальное название архива, но также делать под него оверлеи. Всякие текстурные паки; текстурные паки на текстурные паки и тп. Ну то есть просто дает больше степеней свобод в плане менеджмента игрового контента.
Видимо нужно разделять авторство самого формата VDFS и кодов которые его используют. Авторство кодов мне неинтересно ибо я пишу свои. А что касается формата, ведь какой-нибудь LibreOffice открывает коммерческие форматы MS-Word'а и вроде бы всё ОК. Я думаю что могу читать VDFS без проблем. Если потребуется, то как в упомянутом выше случае с Valve, немного поменяю формат и представлю как свой и сделаю конвертер из оригинального.
У меня есть ещё ряд вопросов по формату файловых томов VDF.
После заголовка тома идут вхождения (entries). И в структуре вхождения есть флаги атрибутов файла. Я правильно понимаю что их значения соответствуют аналогичным из файла WinNT.h?
В WinNT.h флагов больше, но формат VDF предполагает только эти четыре? Например есть в WinNT.h флаг FILE_ATTRIBUTE_DIRECTORY, но в VDF для этих целей добавили ещё одно поле в четыре байта из которых, я так понимаю, используются только два старших бита.
Эти флаги каким-либо образом используются движком игры? Например зачем нужен FILE_ATTRIBUTE_READONLY если тома в режиме игры и так только для чтения. При этом в томах игры он даже не выставлен, но везде выставлен флаг FILE_ATTRIBUTE_ARCHIVE.
sam0delk1n, распарси вхождения готовых vdf и найди закономерность. Флаг (+72) определяет является ли вхождение концом последовательности. А тип (+76) определяет чем является вхождение, папкой или файлом. Когда игра собиралась более ранними версиями сборщика томов (имеет место быть в г1) - тип не указывался. Про это поле можно сразу забыть и строить проверку по указанному индексу во вхождении (+64).
Вы кажется в смещениях ошиблись. По смещению (+72) находится uint32_t в котором бит 31 - флаг директории, а бит 30 - флаг последнего элемента. А по смещению (+76) находятся атрибуты файла.
Ещё нужно отметить что многобайтные типы данных записаны в файле в порядке Little-endian, и нет никаких полей в заголовке тома сигнализирующих об этом.
Добрый день, знатоки. С вами играет СырGuy из Зеленопупинска. Но у игрока несколько вопросов, что немного нарушает правила игры "Что?Где?Когда?". Внимание, вопросы:
1) Если я создам класс в плагине, то могу ли я обратиться к нему через скрипты .d,? Если да, то как? И тыкните носом, пожалуйста, где можно почитать про то, как расширить возможности GS (добавлять внешние функции, классы и т.д.)
2) Мне требуется удалить из контейнера Mobа какие-то предметы, которые там находятся. Через скрипты нас послали лесом. Через Union есть класс oCMobContainer, но как его использовать, пока не догоняю, потому что слишком зеленый я послушник. Если не трудно, то объясните, как проще реализовать это дело.
Подскажите пожалуйста, как нужно правильно редактировать морфируемые меши (вот голову нпс отредактировать получилось и все нормально работает), но вот другие объекты - типа травы и флагов изменить не получается. Загружаю меш и анимацию в 3дмакс, правлю (мне только размер флага надо увеличить), и экспортирую - и меш, и анимацию. Но несмотря на изменения, все экспортируется в первоначальном виде, словно и не было никаких изменений (хотя с головами нпс все получалось). Как это исправить??
Подскажите пожалуйста, как нужно правильно редактировать морфируемые меши (вот голову нпс отредактировать получилось и все нормально работает), но вот другие объекты - типа травы и флагов изменить не получается. Загружаю меш и анимацию в 3дмакс, правлю (мне только размер флага надо увеличить), и экспортирую - и меш, и анимацию. Но несмотря на изменения, все экспортируется в первоначальном виде, словно и не было никаких изменений (хотя с головами нпс все получалось). Как это исправить??
Если хочешь, чтобы скриптовая переменная соответствующего типа указывала на объект определённого класса, то используешь такой С++ код: parser.SetInstance("SOME_SCRIPT_VAR", someObject);
Примером скриптового класса, может являться класс C_NPC.
GS считает что смещение первого поля класса относительно начала объекта равно нулю и все поля расположены в памяти непрерывно. Если для твоего C++ класса это не так, то ты должен после загрузки скриптов установить правильные смещения для символов описывающих поля этого класса.
2) Мне требуется удалить из контейнера Mobа какие-то предметы, которые там находятся. Через скрипты нас послали лесом. Через Union есть класс oCMobContainer, но как его использовать, пока не догоняю, потому что слишком зеленый я послушник. Если не трудно, то объясните, как проще реализовать это дело.
Последний GS, который доступен из Resource Manager, позволяет добавлять сигнатуры новых внешних функций с помощью меню: Справка -> Показать внешние функции. Пример:
Daedalus:
func void Mob_RemoveItems(var instance object,var int item, var int cnt);
Реализация функции должна предоставляться плагином. Примеры функций сможешь найти в исходниках плагина zParserExtender.
Регистрация функций осуществляется с помощью вызова parser->DefineExternal по событию DefineExternals, где указываются имя функции, её адрес, тип возвращаемого значения, типы аргументов и zPAR_TYPE_VOID в конце. Например:
Если хочешь, чтобы скриптовая переменная соответствующего типа указывала на объект определённого класса, то используешь такой С++ код: parser.SetInstance("SOME_SCRIPT_VAR", someObject);
Примером скриптового класса, может являться класс C_NPC.
GS считает что смещение первого поля класса относительно начала объекта равно нулю и все поля расположены в памяти непрерывно. Если для твоего C++ класса это не так, то ты должен после загрузки скриптов установить правильные смещения для символов описывающих поля этого класса.
Используй внешние функции из этого плагина: https://worldofplayers.ru/threads/41999/
Последний GS, который доступен из Resource Manager, позволяет добавлять сигнатуры новых внешних функций с помощью меню: Справка -> Показать внешние функции. Пример:
Daedalus:
func void Mob_RemoveItems(var instance object,var int item, var int cnt);
Реализация функции должна предоставляться плагином. Примеры функций сможешь найти в исходниках плагина zParserExtender.
Регистрация функций осуществляется с помощью вызова parser->DefineExternal по событию DefineExternals, где указываются имя функции, её адрес, тип возвращаемого значения, типы аргументов и zPAR_TYPE_VOID в конце. Например:
Slavemaster, почему GS 3.16 ругается на то, что в 3.15 не воспринимается, как ошибка? Пишет, что не определена функция и причем после комментирования этой функции нормально компилируется, а при повторной компиляции находит еще одну функцию, которая тоже не определена. В чем подвох?
Slavemaster, почему GS 3.16 ругается на то, что в 3.15 не воспринимается, как ошибка? Пишет, что не определена функция и причем после комментирования этой функции нормально компилируется, а при повторной компиляции находит еще одну функцию, которая тоже не определена. В чем подвох?
Если хочешь, чтобы скриптовая переменная соответствующего типа указывала на объект определённого класса, то используешь такой С++ код: parser.SetInstance("SOME_SCRIPT_VAR", someObject);
Примером скриптового класса, может являться класс C_NPC.
GS считает что смещение первого поля класса относительно начала объекта равно нулю и все поля расположены в памяти непрерывно. Если для твоего C++ класса это не так, то ты должен после загрузки скриптов установить правильные смещения для символов описывающих поля этого класса.
Последний GS, который доступен из Resource Manager, позволяет добавлять сигнатуры новых внешних функций с помощью меню: Справка -> Показать внешние функции. Пример:
Daedalus:
func void Mob_RemoveItems(var instance object,var int item, var int cnt);
Реализация функции должна предоставляться плагином. Примеры функций сможешь найти в исходниках плагина zParserExtender.
Регистрация функций осуществляется с помощью вызова parser->DefineExternal по событию DefineExternals, где указываются имя функции, её адрес, тип возвращаемого значения, типы аргументов и zPAR_TYPE_VOID в конце. Например:
Подскажи, пожалуйста
var instance object -что я должен сюда поместить? Имя моба?
И как можно в через Union с помощью хука перехватить момент взаимодействия с мобом?
00720870 .text Debug data ?CallOnStateFunc@oCMobInter@@UAEXPAVoCNpc@@H@Z
00720AD0 .text Debug data ?SendCallOnStateFunc@oCMobInter@@UAEXPAVoCNpc@@H@Z
Эти ли функции нужно перехватывать и если да, то какую из них?
И я чет не очень догоняю. подскажи, пожалуйста, где можно узнать про порядок действий при использований функций из плагина в gothic sourcer? Вот я в эксетерналс прописал функцию. В GS она не видится при компиляции. Шо надо делать?
На данном сайте используются файлы cookie, чтобы персонализировать контент и сохранить Ваш вход в систему, если Вы зарегистрируетесь.
Продолжая использовать этот сайт, Вы соглашаетесь на использование наших файлов cookie.