SkyLoader 53 Опубликовано 15 Ноября 2010 Поделиться Опубликовано 15 Ноября 2010 (изменено) malandrinus, вот, что я нашел в Гейм.длл: .text:1027B45F push offset aOnkeyboardrele; "OnKeyboardRelease" .text:1027B464 push offset loc_1027B639 .text:1027B469 xor eax, eax .text:1027B46B push eax .text:1027B46C mov eax, offset sub_1027B881 .text:1027B471 push eax .text:1027B472 push offset aOnkeyboardpres; "OnKeyboardPress" .text:1027B477 push offset nullsub_40 .text:1027B47C xor eax, eax .text:1027B47E push eax .text:1027B47F mov eax, offset sub_1027B877 .text:1027B484 push eax А в искэр_гейм.екзе нашел только это: CDemoRecord::IR_OnKeyboardPress(int)+CAr ..., а CActor::IR_OnKeyboardPress не было. Изменено 15 Ноября 2010 пользователем SkyLoader Ссылка на комментарий https://www.amk-team.ru/forum/topic/10339-redaktirovanie-dvizhka-x-ray/page/8/#findComment-519713
Malandrinus 615 Опубликовано 15 Ноября 2010 Поделиться Опубликовано 15 Ноября 2010 SkyLoader, надо искать в xrGame.dll из билда mp 2947. Там в комплекте имеются файлы с расширением *.pdb для каждого экзешника или библиотеки. При открытии файла идой в первый раз она спросит, загружать ли отладочную информацию. Надо ответить, что загружать. В этом случае ида уже не будет искать функции, типы и прочее, а просто возмёт это из этих файлов. Там безымянных или нераспознанных функций не будет вообще, и каждая функция будет иметь точную информацию о типе возвращаемого значения, типах и даже именах аргументов. Вот теперь уже и можете искать функции по имени. Можно сделать "jump to function" и там с помощью "search" найти функцию по тем иенам, что я давал. А можно просто отсортировать функции по именам в окошке слева и тогда найти её в списке тоже будет несложно. Ссылка на комментарий https://www.amk-team.ru/forum/topic/10339-redaktirovanie-dvizhka-x-ray/page/8/#findComment-519944
SkyLoader 53 Опубликовано 17 Ноября 2010 Поделиться Опубликовано 17 Ноября 2010 malandrinus, ясно. Я посмотрел эти функции, они большие. Я, правда, не очень понимаю, о чем они и чем могут мне помочь. Ссылка на комментарий https://www.amk-team.ru/forum/topic/10339-redaktirovanie-dvizhka-x-ray/page/8/#findComment-520573
Malandrinus 615 Опубликовано 19 Ноября 2010 Поделиться Опубликовано 19 Ноября 2010 SkyLoader, посмотрел эти функции, они большие. Я, правда, не очень понимаю, о чем они и чем могут мне помочь. ида даёт такой прототип этой функции: void __thiscall CActor__IR_OnKeyboardPress(CActor *this, int cmd); что означает на самом деле такой: void CActor::IR_OnKeyboardPress(int cmd); тип аргумента - неопределённый int, но можно предположить, что это одна из констант-действий из key_bindings. Функции большие, действительно. Это на самом деле хорошо. Думается мне, что там как раз и происходит обработка действий нажатия на клавиши. Скорее всего там в коде стояло что-то вроде такого: switch (cmd){ case <команда стрелять>: // делаем выстрел break; case <команда прыгать>: // выполняем прыжок break; // и т.д. } Это довольно нудно расшифровывать, поскольку оператор switch компилируется по-разному в зависимости от режима оптимизации и внутри превращается в весьма запутанную и неоднозначную конструкцию. Но что и где делается можно иногда понять и так по именам вызываемых функций. К примеру, стоят вызовы CInventory::Action(int,uint). Это явно какие-то действия с предметами в слотах. А вот это CActor::cam_Set(ACTOR_DEFS::EActorCameras) похоже на действия с камерой актора. Вероятно как раз и есть переключение режимов. Где-то там есть и изменение расстояния от актора до камеры. Если нужно найти параметры камеры, то отсюда надо начинать копать. Лезть в эти функции и пытаться понять, откуда они берут данные или куда пишут, какие ещё функции вызывают и т.д. Ссылка на комментарий https://www.amk-team.ru/forum/topic/10339-redaktirovanie-dvizhka-x-ray/page/8/#findComment-521139
AK74 4 Опубликовано 21 Ноября 2010 Поделиться Опубликовано 21 Ноября 2010 Доброго всем времени суток. Может кому пригодится: из билда mp 2947. Там в комплекте имеются файлы с расширением *.pdb для каждого экзешника или библиотеки. Более того, эти же pdb-файлы из билда, частично, подходят и для ЗП, причем даже больше чем для ТЧ. Удачи. Ссылка на комментарий https://www.amk-team.ru/forum/topic/10339-redaktirovanie-dvizhka-x-ray/page/8/#findComment-522159
Malandrinus 615 Опубликовано 21 Ноября 2010 Поделиться Опубликовано 21 Ноября 2010 AK74, ну как они могут подходить? Ведь файлы PDB содержат привязки строк кода к бинарным файлам. Изменились бинарные файлы - всё, соответствие порушено. Даже если скомпилировать тот-же исходник с другими настройками, уже не подойдёт. А здесь мы говорим о новой версии движка. Т.е. НЕ подходят никаким боком. Информацию косвенно можно использовать, поскольку архитектура движка в целом не изменилась. Но только косвенно использовать: смотреть на старый (его легче изучать), затем сопоставлять с новыми версиями, которые уже без отладочной информации. Ссылка на комментарий https://www.amk-team.ru/forum/topic/10339-redaktirovanie-dvizhka-x-ray/page/8/#findComment-522526
AK74 4 Опубликовано 23 Ноября 2010 Поделиться Опубликовано 23 Ноября 2010 Доброго всем времени суток. malandrinus, камрад! Я ведь свое утверждение тоже не с бодуна придумал oid __thiscall PAPI__ParticleAction__ParticleAction(PAPI::ParticleAction *this) { this->vtable = PAPI__ParticleAction___vftable_; this->m_Flags.flags = 0; } // 1000E148: using guessed type int (*PAPI__ParticleAction___vftable_[4])(); //----- (10001030) -------------------------------------------------------- void __thiscall PAPI__ParticleAction__ParticleAction(PAPI::ParticleAction *this, PAPI::ParticleAction *__that) { this->vtable = PAPI__ParticleAction___vftable_; this->m_Flags.flags = __that->m_Flags.flags; this->type = __that->type; } // 1000E148: using guessed type int (*PAPI__ParticleAction___vftable_[4])(); //----- (10001050) -------------------------------------------------------- void __thiscall PAPI__pDomain__pDomain(PAPI::pDomain *this) { ; } //----- (10001060) -------------------------------------------------------- int __thiscall PAPI__pDomain__operator_(int this, int a2) { int result; // eax@1 result = this; *(_DWORD *)this = *(_DWORD *)a2; *(_DWORD *)(this + 4) = *(_DWORD *)(a2 + 4); *(_DWORD *)(this + 8) = *(_DWORD *)(a2 + 8); *(_DWORD *)(this + 12) = *(_DWORD *)(a2 + 12); *(_DWORD *)(this + 16) = *(_DWORD *)(a2 + 16); *(_DWORD *)(this + 20) = *(_DWORD *)(a2 + 20); *(_DWORD *)(this + 24) = *(_DWORD *)(a2 + 24); *(_DWORD *)(this + 28) = *(_DWORD *)(a2 + 28); *(_DWORD *)(this + 32) = *(_DWORD *)(a2 + 32); *(_DWORD *)(this + 36) = *(_DWORD *)(a2 + 36); *(_DWORD *)(this + 40) = *(_DWORD *)(a2 + 40); *(_DWORD *)(this + 44) = *(_DWORD *)(a2 + 44); *(_DWORD *)(this + 48) = *(_DWORD *)(a2 + 48); *(_DWORD *)(this + 52) = *(_DWORD *)(a2 + 52); *(_DWORD *)(this + 56) = *(_DWORD *)(a2 + 56); *(_DWORD *)(this + 60) = *(_DWORD *)(a2 + 60); *(_DWORD *)(this + 64) = *(_DWORD *)(a2 + 64); return result; } //----- (100010D0) -------------------------------------------------------- void __thiscall PAPI__PAAvoid__PAAvoid(PAPI::PAAvoid *this) { this->baseclass_0.m_Flags.flags = 0; this->baseclass_0.vtable = &PAPI__PAAvoid___vftable_; } // 1000E184: using guessed type int (__stdcall *PAPI__PAAvoid___vftable_)(int effect, float dt); //----- (100010E0) -------------------------------------------------------- void __thiscall PAPI__PAAvoid__PAAvoid(PAPI::PAAvoid *this, PAPI::PAAvoid *__that) { this->baseclass_0.vtable = PAPI__ParticleAction___vftable_; this->baseclass_0.m_Flags.flags = __that->baseclass_0.m_Flags.flags; this->baseclass_0.type = __that->baseclass_0.type; this->baseclass_0.vtable = &PAPI__PAAvoid___vftable_; memcpy(&this->positionL, &__that->positionL, sizeof(this->positionL)); memcpy(&this->position, &__that->position, 0x50u); } //----- (10001550) -------------------------------------------------------- int __thiscall PAPI__ParticleAction__ParticleAction(int this) { int result; // eax@1 result = this; *(_DWORD *)this = PAPI__ParticleAction___vftable_; *(_DWORD *)(this + 4) = 0; return result; } // 1000E164: using guessed type int (*PAPI__ParticleAction___vftable_[4])(); //----- (10001560) -------------------------------------------------------- int __thiscall PAPI__ParticleAction__ParticleAction(int this, int a2) { int result; // eax@1 result = this; *(_DWORD *)this = PAPI__ParticleAction___vftable_; *(_DWORD *)(this + 4) = *(_DWORD *)(a2 + 4); *(_DWORD *)(this + 8) = *(_DWORD *)(a2 + 8); return result; } // 1000E164: using guessed type int (*PAPI__ParticleAction___vftable_[4])(); //----- (10001580) -------------------------------------------------------- int __thiscall PAPI__ParticleAction__operator_(int this, int a2) { int result; // eax@1 result = this; *(_DWORD *)(this + 4) = *(_DWORD *)(a2 + 4); *(_DWORD *)(this + 8) = *(_DWORD *)(a2 + 8); return result; } //----- (100015A0) -------------------------------------------------------- void *__thiscall PAPI__pDomain__pDomain(void *this) { return this; } //----- (100015B0) -------------------------------------------------------- int __thiscall PAPI__pDomain__operator_(int this, int a2) { int result; // eax@1 result = this; *(_DWORD *)this = *(_DWORD *)a2; *(float *)(this + 4) = *(float *)(a2 + 4); *(float *)(this + 8) = *(float *)(a2 + 8); *(float *)(this + 12) = *(float *)(a2 + 12); *(float *)(this + 16) = *(float *)(a2 + 16); *(float *)(this + 20) = *(float *)(a2 + 20); *(float *)(this + 24) = *(float *)(a2 + 24); *(float *)(this + 28) = *(float *)(a2 + 28); *(float *)(this + 32) = *(float *)(a2 + 32); *(float *)(this + 36) = *(float *)(a2 + 36); *(float *)(this + 40) = *(float *)(a2 + 40); *(float *)(this + 44) = *(float *)(a2 + 44); *(float *)(this + 48) = *(float *)(a2 + 48); *(float *)(this + 52) = *(float *)(a2 + 52); *(float *)(this + 56) = *(float *)(a2 + 56); *(float *)(this + 60) = *(float *)(a2 + 60); *(float *)(this + 64) = *(float *)(a2 + 64); return result; } //----- (10001620) -------------------------------------------------------- int __thiscall PAPI__PAAvoid__PAAvoid(int this) { int result; // eax@1 result = this; *(_DWORD *)(this + 4) = 0; *(_DWORD *)this = &PAPI__PAAvoid___vftable_; return result; } // 1000E178: using guessed type int (__stdcall *PAPI__PAAvoid___vftable_)(float, int, int); //----- (10001630) -------------------------------------------------------- int __thiscall PAPI__PAAvoid__PAAvoid(int this, int a2) { int result; // eax@1 result = this; *(_DWORD *)this = PAPI__ParticleAction___vftable_; *(_DWORD *)(this + 4) = *(_DWORD *)(a2 + 4); *(_DWORD *)(this + 8) = *(_DWORD *)(a2 + 8); *(_DWORD *)this = &PAPI__PAAvoid___vftable_; memcpy((void *)(this + 12), (const void *)(a2 + 12), 0x44u); memcpy((void *)(this + 80), (const void *)(a2 + 80), 0x50u); return result; } Очевидно, что если подправить типы данных, то некоторые функции окажутся идентичными, не смотря на то что живут по разным адресам. Ту же самую картинку (в смысле совпадения) я встречал и xrNetServer.c. Билдовые xrGame.c и xrRender_R1.c мне получить не удалось - IDA вылетает с ошибкой, поэтому сравнить не могу. Это я и подразумевал под "частично, подходят и для ЗП". Впрочем, чего зря спорить - проделайте это сами и все увидите, много времени не займет. Удачи. Ссылка на комментарий https://www.amk-team.ru/forum/topic/10339-redaktirovanie-dvizhka-x-ray/page/8/#findComment-523263
SkyLoader 53 Опубликовано 23 Ноября 2010 Поделиться Опубликовано 23 Ноября 2010 malandrinus, ясно, спс. Я посмотрел, что при умирании ГГ происходит этот CActor::cam_Set(ACTOR_DEFS::EActorCameras). Есть некие апдейты камеры (cam_update). Правда, там мало информации. Ссылка на комментарий https://www.amk-team.ru/forum/topic/10339-redaktirovanie-dvizhka-x-ray/page/8/#findComment-523303
Kolmogor 5 Опубликовано 23 Ноября 2010 Поделиться Опубликовано 23 Ноября 2010 AK74, 2947 это и есть ТЧ. такой билд у одного из первых патчей ТЧ. Поэтому pdb от него не могут подходить к ТЧ меньше чем к ЗП. pdb-файл не может подходить частично - он или подгрузится к исполняемому модулю или нет. Почему ты при декомпиляции ЗП частично не подгрузил pdb, чтобы получить такой же результат, как в 2947 - ведь функции одинаковые? Malandrinus именно про это и говорил, что много функций одинаковых, много похожих. И информацию полученную из 2947 с pdb, можно использовать для понимая ЗП Ссылка на комментарий https://www.amk-team.ru/forum/topic/10339-redaktirovanie-dvizhka-x-ray/page/8/#findComment-523309
CAHCAHbl4 22 Опубликовано 24 Ноября 2010 Поделиться Опубликовано 24 Ноября 2010 Глубокий поклон мастерам кодерам. Если движок роете то мож кто разобрался с классами нпц оружия итд.? Возможно ли добавить своего монстра со своей логикой? Или скажем новый класс оружия или одона? ПС. если это нубский бред - трите Ссылка на комментарий https://www.amk-team.ru/forum/topic/10339-redaktirovanie-dvizhka-x-ray/page/8/#findComment-523922
DiXares 1 Опубликовано 27 Ноября 2010 Поделиться Опубликовано 27 Ноября 2010 Товарищи! Вами не было замечено, что в ЧН и ЗП скрипты обрабатываются быстрее? В ТЧ используется lua5.1, а в ЧН и ЗП - lua.JIT.1.1.4 lua.JIT.1.1.4 - Должен работать быстрее lua5.1 Зачем я это написал... фз... Ссылка на комментарий https://www.amk-team.ru/forum/topic/10339-redaktirovanie-dvizhka-x-ray/page/8/#findComment-525279
Шип 0 Опубликовано 28 Ноября 2010 Поделиться Опубликовано 28 Ноября 2010 DiXares, lua.JIT.1.1.4 - это всего-лишь компилятор языка, а не сам язык, он участвует в связи скриптов с двигом. Естессно, в ТЧ он старее. Ссылка на комментарий https://www.amk-team.ru/forum/topic/10339-redaktirovanie-dvizhka-x-ray/page/8/#findComment-525352
Malandrinus 615 Опубликовано 28 Ноября 2010 Поделиться Опубликовано 28 Ноября 2010 JIT = "Just In Time" компилятор "на лету". Ссылка для информации. Если вкратце, то суть в том, что вместо обычной интерпретации байткода при каждом исполнении при первом проходе функция компилируется в машинный код и затем исполняется. При всех последующих выполнениях функции уже исполняется компилированная версия. Такая же технология используется в среде выполнения .NET. Такой компилятор используется во всех версиях движка, так что особой разницы в скорости выполнения нет. Ссылка на комментарий https://www.amk-team.ru/forum/topic/10339-redaktirovanie-dvizhka-x-ray/page/8/#findComment-525377
Сяк 59 Опубликовано 28 Ноября 2010 Поделиться Опубликовано 28 Ноября 2010 Тема безусловно очень интересная - но я позволю себе высказать одно сомнение и одно предложение: Для собственного удовлетворения конечно интересно и самодостаточно производит изменения в движке игры, но как эти изменения донести до пользователя? Насколько допустимо с правовой стороны распространять "ломанный" вариант лицензионного продукта? Предложение - производить изменения не в физическом теле файла x-ray, а в виртуальном. Ссылка на комментарий https://www.amk-team.ru/forum/topic/10339-redaktirovanie-dvizhka-x-ray/page/8/#findComment-525387
SibireaStalker 0 Опубликовано 28 Ноября 2010 Поделиться Опубликовано 28 Ноября 2010 Есть ли способ ускорения загрузки? Игра грузится очень долго. Лог по вашей теме кину потом, пока помогите с этим плиз ) Ссылка на комментарий https://www.amk-team.ru/forum/topic/10339-redaktirovanie-dvizhka-x-ray/page/8/#findComment-525401
Malandrinus 615 Опубликовано 28 Ноября 2010 Поделиться Опубликовано 28 Ноября 2010 Сяк, с точки зрения создателей игры нет никакой разницы меняется движок, скрипты или что-то ещё. Любые изменения противоречат лицензии. Таким образом, любое модостроение под сингл является незаконным и возможно лишь в силу того, что фирма-разработчик закрывает на это глаза. Насчёт виртуальности если честно не понял. Ссылка на комментарий https://www.amk-team.ru/forum/topic/10339-redaktirovanie-dvizhka-x-ray/page/8/#findComment-525403
Сяк 59 Опубликовано 28 Ноября 2010 Поделиться Опубликовано 28 Ноября 2010 Сяк, с точки зрения создателей игры нет никакой разницы меняется движок, скрипты или что-то ещё. Любые изменения противоречат лицензии. Я не согласен. Т.к. изменение скриптов не предполагает возможности запуска игры без лицензионного диска. А изменение движка - предполагает. Ссылка на комментарий https://www.amk-team.ru/forum/topic/10339-redaktirovanie-dvizhka-x-ray/page/8/#findComment-525408
Vano_Santuri 33 Опубликовано 28 Ноября 2010 Поделиться Опубликовано 28 Ноября 2010 malandrinus, Менять в виртуальной памяти, когда запущен процесс. Как вариант fov в памяти... Ссылка на комментарий https://www.amk-team.ru/forum/topic/10339-redaktirovanie-dvizhka-x-ray/page/8/#findComment-525411
DiXares 1 Опубликовано 28 Ноября 2010 Поделиться Опубликовано 28 Ноября 2010 Шип, а где тогда в ТЧ либа jit'а? В ЧН и ЗП она есть, а в ТЧ нету... Читал, что luajit - это добавка к lua и содержит его самого. Поэтому в ЧН и ЗП нет либы xrLua.dll, т.к. его заменяет LuaJIT.dll. Ссылка на комментарий https://www.amk-team.ru/forum/topic/10339-redaktirovanie-dvizhka-x-ray/page/8/#findComment-525420
gruber 2 481 Опубликовано 28 Ноября 2010 Поделиться Опубликовано 28 Ноября 2010 (изменено) Вы соглашаетесь с запретом на обратное ассемблирование, декомпиляцию, инженерный анализ и создание дериватов на основе данного программного обеспечения. Все права, не указанные в настоящем Соглашении, остаются за Лицензиаром. Вы признаете и соглашаетесь с тем, что данное программное обеспечение, включая любые входящие в него изображения, фотографии, анимацию, видео-, аудио- и музыкальные фрагменты, а также текст и документацию, является собственностью Лицензиара и/или автора(ов) Из лецензионного соглашения По сути распаковка архивов уже взлом-другое дело ,что если сделано это было для некомерческого использования,то наказание,максимум расторжение лицензии по инициативе правоабладателя Ну это как с машинами-поставил спойлер или залез в движок-с гарантии снимают Изменено 28 Ноября 2010 пользователем gruber Ссылка на комментарий https://www.amk-team.ru/forum/topic/10339-redaktirovanie-dvizhka-x-ray/page/8/#findComment-525428
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти