Это популярное сообщение. Malandrinus 615 Опубликовано 22 Ноября 2010 Это популярное сообщение. Поделиться Опубликовано 22 Ноября 2010 (изменено) Проект X-Ray extensions Представляет собой набор добавлений, расширяющих возможности движка для скриптёров, а также, в ряде случаев, меняющих поведение игры. Изменения реализованы в виде бинарных патчей библиотек и исполняемых файлов. Адрес проекта на Google CodeДокументация одним файлом в chm формате (зеркало) по состоянию на 15 августа 2013 г. (собрана, отформатирована и скомпилирована @Kontro-zzz).Версии игры, поддерживаемые на данный момент:ТЧ (патч 1.0006): xrGame.dll, XR_3DA.exe, xrRender_R1/2ЧН (патч 10): xrGame.dll, xrRender_R1/2/3ЗП (патч 1.6.02): xrGame.dll, xrRender_R1/2/3/4 svn хранилище не содержит оригинальных файлов игры. Не забывайте делать резервные копии перед заменой файлов игры! Ссылка на адрес нового репозитария: https://github.com/KD87/xray-extensions Изменено 23 Июня 2016 пользователем Malandrinus 12 12 1 8 Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Anonim 680 Опубликовано 28 Сентября 2014 Поделиться Опубликовано 28 Сентября 2014 (изменено) Переменные погодных конфигов не работают для саншафтов, как нужно их изменить чтобы они заработали? Изменено 28 Сентября 2014 пользователем Anonim Ссылка на комментарий
Samber13 227 Опубликовано 1 Октября 2014 Поделиться Опубликовано 1 Октября 2014 (изменено) Всем, хаюшки! Совсем недавно, а именно вчера решил попробывать поковырять движок. И уточнив что я нуб, излогаю собственно сам вопрос. Как мне сталкерский курсор состоящий из seq-спрайта, заменить на мелкософтовский анимированный .ani Заранее благодарен. Изменено 1 Октября 2014 пользователем Samber13 Калькулятор номера билда. Ссылка на комментарий
RayTwitty 492 Опубликовано 1 Октября 2014 Поделиться Опубликовано 1 Октября 2014 Yes. How to repair this?Turn off the actor shadow in xrGame.dll. Вопрос к разработчикам. Можно ли надеяться на появление в X-RAY extensions равноценных слотов под стволы, которые давно реализованы в 1.0007(RC1)? Вместе с кнопками быстрого доступа F1-F4? Очень хотелось бы)Не думаю, в исходниках достаточно много пришлось поправить, чтобы реализовать это. На асме слишком геморно и долго. Ссылка на комментарий
НаноБот 737 Опубликовано 4 Октября 2014 Поделиться Опубликовано 4 Октября 2014 В общем решил флешгранаты делать для ТЧ 1.0006 X-Ray extensions. Хорошо добавить такие функции, как is_exploded, взорван ли объект, возращает тру если граната или ракета взорвана или другой взрывной объект, или фальш если нет, для остальных объектов возращает нил. Так же если заставить нормально работать функцию getVisible то это функция будет не обязательна. Ещё бы не плохо устранить баг в ЧН, при получении объекта вертолёт(get_helicopter()) и машина(get_car()) игра вылетает, если таким объект не является (должно просто возращать нил), этот баг затрудняет поиск указаных объектов. ...в конце концов, важен лишь, машинный код. СТАЛКЕР только для ПК! Ссылка на комментарий
RayTwitty 492 Опубликовано 5 Октября 2014 Поделиться Опубликовано 5 Октября 2014 (изменено) если таким объект не является (должно просто возращать нил), этот баг затрудняет поиск указаных объектов.Проверки на класс (get_clsid(obj) == clsid.car_s и get_clsid(obj) == clsid.helicopter_s) разве не катят? Изменено 5 Октября 2014 пользователем Shadows Ссылка на комментарий
НаноБот 737 Опубликовано 6 Октября 2014 Поделиться Опубликовано 6 Октября 2014 (изменено) Константа clsid.helicopter_s в луахелпе отсутствует, а clsid.helicopter не работает, впрочем, в таблице db.heli есть все зарегистрированные вертушки. Проверка взорван ли объект, так же можно, проверить трассировкой от центра объекта в любую сторону, хотя лучше конечно движковой правкой, проверка нужной переменой, так быстрей, т.к. может использоваться почти каждый фастапдейт. ЗЫ Ещё хотел спросить, а трассировка выполняется CPU или GPU, по идей граф. процессор быстрей выполнит эту функцию. Изменено 6 Октября 2014 пользователем НаноБот ...в конце концов, важен лишь, машинный код. СТАЛКЕР только для ПК! Ссылка на комментарий
RayTwitty 492 Опубликовано 6 Октября 2014 Поделиться Опубликовано 6 Октября 2014 (изменено) Константа clsid.helicopter_s в луахелпе отсутствуетВ луахелпе много чего нет, что на самом деле экспортировано. Взять хотя бы класс прогресс-бара... Так что стоит таки проверять все варианты. Проверка взорван ли объектДля объектов на классе CExplosive можно проверять флаг m_explosion_flags.test(flExploded). Изменено 6 Октября 2014 пользователем Shadows Ссылка на комментарий
НаноБот 737 Опубликовано 6 Октября 2014 Поделиться Опубликовано 6 Октября 2014 (изменено) В общем изнутри трассировка не чего не даёт, с наружи мешают постороние объекты, это я про проверку взорван ли объект трассировкой. Проверять лучше так: local res = grn:get_wpn_int(nil, smes) или так:local res = grn:get_go_int16(smes) Остаётся узнать, какое смещение у flExploded. А теперь про то что в сингле сопротивление воздуха для всех пуль одинаковое, а для МП такое которое указано в секции патронов. if (GameID() == GAME_SINGLE) air_resistance.mul(-m_fAirResistanceK*delta_time_sec); else air_resistance.mul(-bullet->air_resistance*(bullet->speed)/(bullet->max_speed)*delta_time_sec); В общем надо найти имено проверку if (GameID() == GAME_SINGLE) чуть чуть по колдовать, опа опа америка-европа можно и в сингле настраивать как угодно боеприпасы, для всяких снайпер-модов в самый раз. ЗЫ Добавлю #pragma once enum EGameTypes { GAME_ANY = 0, GAME_SINGLE = 1, GAME_DEATHMATCH = 2, // GAME_CTF = 3, // GAME_ASSAULT = 4, // Team1 - assaulting, Team0 - Defending GAME_CS = 5, GAME_TEAMDEATHMATCH = 6, GAME_ARTEFACTHUNT = 7, //identifiers in range [100...254] are registered for script game type GAME_DUMMY = 255 // temporary game type }; В общем, достаточно заменить константу GAME_SINGLE = 1 на например 16, и при проверке всегда будет второй блок срабатывать. Ладно попробую сам поискать код, хотя это надо дизассемблировать, но я помню куртана (старая игрушка, давно это было) и без его модифицировал. Изменено 6 Октября 2014 пользователем НаноБот ...в конце концов, важен лишь, машинный код. СТАЛКЕР только для ПК! Ссылка на комментарий
RayTwitty 492 Опубликовано 6 Октября 2014 Поделиться Опубликовано 6 Октября 2014 (изменено) заменить константу GAME_SINGLE = 1 на например 16, и при проверке всегда будет второй блок срабатыватьТогда много где будет какой-нибудь "другой" блок срабатывать. И что мешает переделать условие в том куске кода? Изменено 6 Октября 2014 пользователем Shadows Ссылка на комментарий
НаноБот 737 Опубликовано 6 Октября 2014 Поделиться Опубликовано 6 Октября 2014 (изменено) В общем, смотрим файл XRay\xr_3da\xrGame\Level_Bullet_Manager.cpp air_resistance.mul(-bullet->air_resistance*(bullet->speed)/(bullet->max_speed)*delta_time_sec) bullet->air_resistance какое именно у этих патронов БК? air_resistance = cartridge.m_kAirRes; вот такое. В сингле надо точно установить что cartridge.m_kAirRes не нил. Смотрим в той же папки WeaponAmmo.cpp void CWeaponAmmo::Load(LPCSTR section) { inherited::Load (section); m_kDist = pSettings->r_float(section, "k_dist"); m_kDisp = pSettings->r_float(section, "k_disp"); m_kHit = pSettings->r_float(section, "k_hit"); m_kImpulse = pSettings->r_float(section, "k_impulse"); m_kPierce = pSettings->r_float(section, "k_pierce"); m_kAP = READ_IF_EXISTS(pSettings, r_float, section, "k_ap", 0.0f); m_u8ColorID = READ_IF_EXISTS(pSettings, r_u8, section, "tracer_color_ID", 0); if (pSettings->line_exist(section, "k_air_resistance")) m_kAirRes = pSettings->r_float(section, "k_air_resistance"); else m_kAirRes = pSettings->r_float(BULLET_MANAGER_SECTION, "air_resistance_k"); m_tracer = !!pSettings->r_bool(section, "tracer"); m_buckShot = pSettings->r_s32(section, "buck_shot"); m_impair = pSettings->r_float(section, "impair"); fWallmarkSize = pSettings->r_float(section,"wm_size"); R_ASSERT (fWallmarkSize>0); m_boxSize = (u16)pSettings->r_s32(section, "box_size"); m_boxCurr = m_boxSize; } Из кода я вижу если в секции нет параметра k_air_resistance для МП, то загрузить параметр air_resistance_k это для сингла. В общем достаточно найти адрес константы в этой функции, и изменить её так, что по любому второй блок срабатывал, достаточно такого значения, которое не встречающего в EGameTypes (например 16). Константа 4-х байтовая т.к. GameID() возвращает ансигнед дворд. u32 GameID(){return Game().Type();} В общем как то так, тут бы с компилировать код что бы знать какая сигнатура в этом месте, что бы найти место в файле xrGame.dll. Вот только у меня нет нужного софта для этого дела. Но я думаю вам это не трудно, дело то стоящее. ЗЫ Хотя я мог, не так понять как работают константы в С++, я знаю объжект паскаль, а С++ для меня полутёмный лес. В общем значение константы прямо в код вставляется. Типа так. Call [GameID] cmp eax, 01h jne m1 ... m1: Изменено 7 Октября 2014 пользователем НаноБот ...в конце концов, важен лишь, машинный код. СТАЛКЕР только для ПК! Ссылка на комментарий
-StalkMen- 159 Опубликовано 7 Октября 2014 Поделиться Опубликовано 7 Октября 2014 что бы найти место в файле xrGame.dll if (pSettings->line_exist(section, "k_air_resistance")) Надобно это найти? Тогда качать IDA и дальше поиск k_air_resistance и просмотр ссылок на эту строку... Вот только зачем это, если у нас есть нормальные исходники найти адрес константы в этой функции, и изменить её jmp поставить, не?)) cmp eax, 01h бывает ещё хитрее, ,, mov eXX,01 cmp eax,eXX Вот ещё что, смещения текущего Гейм ID для чит енжина <CheatEntry> <ID>1</ID> <Description>"GameType1"</Description> <Color>80000008</Color> <VariableType>4 Bytes</VariableType> <Address>"xrEngine.exe"+000931A8</Address> <Offsets> <Offset>414</Offset> <Offset>4</Offset> </Offsets> </CheatEntry> <CheatEntry> <ID>34</ID> <Description>"GameType2"</Description> <Color>80000008</Color> <VariableType>4 Bytes</VariableType> <Address>[[["xrGame.dll"+512BDC]]+486F8]+10</Address> </CheatEntry> Ссылка на комментарий
НаноБот 737 Опубликовано 7 Октября 2014 Поделиться Опубликовано 7 Октября 2014 (изменено) Паскаль т.е. делфи 6 компилет похожую строку в типа такой код. Call [GameID]dec eaxjne m1...m1: В общем, делфи компилирует на сколько знаю, более хитрый код чем С++, наверно это связано с требованием компилировать более быстро, т.к. проекты как правила более громоздки для С++. Для модификации строчку Call [GameID] заменить на jmp m1, это заменить всего 5 байт-кода. Ещё идея добавить в секцию патронов параметр k_speed - коэффициент скорости. speed = speed * k_speed; И тогда баллистическая модель в сталкере будет почти идеальная. Но это уже по сложней будет. Ещё бы нормальные разрывные пули сделать, в точку попадания спавнить взрывной предмет и тут же подрывать. Такая фишка как Маади-Грифин 30 мм, будет работать как в реальной жизни, бронебойный урановый снаряд, и разрывной ОФС (Осколочно-Фугасный-Снаряд). Изменено 7 Октября 2014 пользователем НаноБот ...в конце концов, важен лишь, машинный код. СТАЛКЕР только для ПК! Ссылка на комментарий
DDamian724 18 Опубликовано 12 Октября 2014 Поделиться Опубликовано 12 Октября 2014 Welcome. How to make items such as backlight in LA , that is, as we have in the slot gun is when we have a window of sales he is green? Добро пожаловать . Как сделать такие элементы, как подсветка в Лос-Анджелесе , который , как у нас в слот пистолет , когда у нас есть окно продаж он зеленый ? 1 Ссылка на комментарий
naxac 2 445 Опубликовано 13 Октября 2014 Поделиться Опубликовано 13 Октября 2014 @DDamian724, you can choose this in correction_list.txt. Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
RayTwitty 492 Опубликовано 13 Октября 2014 Поделиться Опубликовано 13 Октября 2014 How to make items such as backlight in LA , that is, as we have in the slot gun is when we have a window of sales he is green? You should unlock this fixes: ; !!! кастомную заливку можно включать, когда имеем альтернативную скриптовую обвязку !!! ;0x103BF3C7 5 ; jmp CUITradeWnd__FillList_fix ; кастомная заливка предметов в окне торговли ;0x103CBF49 5 ; jmp CUICarBodyWnd__UpdateLists_fix ; кастомная заливка предметов в окне обыска ящиков in correction_list file. Ссылка на комментарий
DDamian724 18 Опубликовано 13 Октября 2014 Поделиться Опубликовано 13 Октября 2014 Thanks bro How to download newest x-ray extensions from google code??? Ссылка на комментарий
НаноБот 737 Опубликовано 13 Октября 2014 Поделиться Опубликовано 13 Октября 2014 Проверять лучше так: local res = grn:get_wpn_int(nil, smes) или так: local res = grn:get_go_int16(smes) Остаётся узнать, какое смещение у flExploded. Кстати, с гранатами без чеки (объект explosive, missile) эти функции не работают, возвращают нуль или какую-то ерунду, пробовал со смещением до 50000. Хорошо бы дополнительную такую функцию сделать, что бы с любым типом объекта работало. ...в конце концов, важен лишь, машинный код. СТАЛКЕР только для ПК! Ссылка на комментарий
naxac 2 445 Опубликовано 15 Октября 2014 Поделиться Опубликовано 15 Октября 2014 @DDamian724, click me Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
НаноБот 737 Опубликовано 15 Октября 2014 Поделиться Опубликовано 15 Октября 2014 (изменено) Не понял у как get_bone_name работает? obj:get_bone_name(void) просто название кости №0 передаёт, а как индекс задавать не понятно, в листингах указано через какую-то глобальную переменную, а какую не ясно. И ещё забыли указать, для функции трассировки: element = level.get_ray_pick_element() -- элемент объекта: номер кости для объекта, или номер треугольника для геометрии. Вот бы ещё функции; нормаль треугольника и тип материала треугольника определять. ЗЫ Разобрался, в общем так: set_int_arg0(element) bone = res_obj:get_bone_name() element - это индекс кости res_obj - это геймобъект bone - имя кости Изменено 15 Октября 2014 пользователем НаноБот ...в конце концов, важен лишь, машинный код. СТАЛКЕР только для ПК! Ссылка на комментарий
НаноБот 737 Опубликовано 16 Октября 2014 Поделиться Опубликовано 16 Октября 2014 (изменено) Вертексы треугольника: local vera = level.get_tri_vertex1(element) local verb = level.get_tri_vertex2(element) local verc = level.get_tri_vertex3(element) local normal = normal_triangle(vera, verb, verc) Нормаль треугольника: a, b, c - это вертексы треугольника function normal_triangle(a, b, c) -- нормаль треугольника local n = vector() n.x = -((b.y-a.y)*(c.z-a.z))-((b.z-a.z)*(c.y-a.y)) n.y = -((b.z-a.z)*(c.x-a.x))-((b.x-a.x)*(c.z-a.z)) n.z = -((b.x-a.x)*(c.y-a.y))-((b.y-a.y)*(c.x-a.x)) return n:normalize() end Но там уже хранится эта нормаль! Вектор отражения: local dirref = vector():set(0,0,0) dirref:reflect(dir, normal) Вроде должно работать, будем проверять. Для пуль так же надо знать свойство материала, хранится вроде там же, где и вертексы треугольника геометрии. PS Предлагаю имена функциям: get_tri_normal(element) -- нормаль треугольника get_tri_material(element) -- материал треугольника Изменено 16 Октября 2014 пользователем НаноБот ...в конце концов, важен лишь, машинный код. СТАЛКЕР только для ПК! Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти