Это популярное сообщение. 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 Ссылка на комментарий
RayTwitty 509 Опубликовано 20 Ноября 2015 Поделиться Опубликовано 20 Ноября 2015 (изменено) а оно может измениться и после открытия Дело в том, что измениться оно может только в очень специфичных случаях (например какой-то дебаговый спавн, в штатном режиме как я пониманию, ничего просто так не появляется), но самое главное - лист не перезагружается после перемещений между поясом\слотами и рюкзаком Если вы конечно не сделали это принудительно.Впрочем, наверно это зависит от мода - где-то требуется, где-то нет. В самом деле, там только флажки ставим, плюс-минус вызов не напрягает. На счет правки солнца - понятно. Значит придумать, как исправить баг, а эту правку в топку. З.Ы. посмотрел в исходниках репозитория xp-dev и что-то не нашел упоминания о правке. Получается её до сих пор не сделали? Всегда думал, что солнце уже исправлено и даже не обращал внимание на его отсутствие. Здесь ситуация такая, что я сам понятия не имею, что реально делает эта правка. Провел анализ кода - в этой правке (не считая проверки флага g_ignore_game_state_update, который в оригинале не влияет) ты просто убрал вызов GamePersistent().Environment().Invalidate() (call ds:CEnvironment__Invalidate). Собственно, солнце у меня восстановилось и в исходниках, после того как я закомментировал вызов. Но вместе с солнцем "восстановились" и баги)) Будем думать дальше. Изменено 20 Ноября 2015 пользователем Murarius Ссылка на комментарий
_Val_ 2 225 Опубликовано 20 Ноября 2015 Поделиться Опубликовано 20 Ноября 2015 Такс...А можно поподробней узнать, что там вообще с солнцем? Я сейчас юзаю последнюю ревизию и сборку на которой погода вроде как АМК, но положение солнца поправлено. Ну и луны само собой. Багов вроде не наблюдал, хотя подолгу и не бегал. Ссылка на комментарий
RayTwitty 509 Опубликовано 20 Ноября 2015 Поделиться Опубликовано 20 Ноября 2015 (изменено) Багов вроде не наблюдал, хотя подолгу и не бегал.Включи игру, загрузи сейв, например с утренней погодой. Потом загрузи ночной сейв (сама секция погоды должна быть той же) и посмотри, что получится. В некоторых случаях она либо не обновится, либо обновится частями. После повторной загрузки сейва ночи, погода нормально обновится. З.Ы. если продолжить играть с криво-загруженной погодой, то можно наблюдать довольно интересные сочетания, самое смешное, иногда эти сочетания получаются довольно удачными: http://www.gameru.net/forum/index.php?autocom=gallery&req=si&img=44233 Скрин сделан именно в такой момент. При нормальной работе погоды, такого часа просто бы не существовало. Изменено 20 Ноября 2015 пользователем RayTwitty Ссылка на комментарий
Forser 47 Опубликовано 20 Ноября 2015 Поделиться Опубликовано 20 Ноября 2015 PS2: git - отстой, сильно переусложнён и избыточен для целей этого проекта. А как ты относишься к Mercurial репозиториям? Ссылка на комментарий
Malandrinus 615 Опубликовано 21 Ноября 2015 Автор Поделиться Опубликовано 21 Ноября 2015 (изменено) Значит придумать, как исправить баг, а эту правку в топку Сдаётся мне, что если и поймёшь, как это исправить, то вряд ли сможешь это перенести в виде патча. Рациональней будет уже забить на XE и мутить дальше из исходников. как ты относишься к Mercurial репозиториям? Я мало про них знаю. Ну вот открываю вики, читаю слова: "разработанная для эффективной работы с очень большими репозиториями кода" "является распределённой (децентрализованной) системой контроля версий" "поддерживает полностью децентрализованную работу, ветвление" Это всё замечательно, но конкретно этот проект - полная противоположность этих требований. XE - проект на самом деле очень маленький (особенно если рассматривать каждый подпроект по отдельности). Количество разработчиков - также очень небольшое. Ветвление - может где-то и полезно, но конкретно в этом проекте, IMHO, фича вредная. Сам проект XE вертится вокруг предельно конкретных DLL, правки обычно сугубо локальные и никак не могут, точнее не должны, вести к созданию изолированных сборок. Более того, форки в контексте нашего проекта вообще противоречат его изначальной задумке аккумулировать все правки. Вот конфигурирование проекта - дело полезное, но ветки для этого не нужны. Поэтому нам больше подходит система контроля версий централизованная и желательно как можно более простая, типа SVN. ЗЫ: Я всё же хочу уточнить на всякий случай, что "git - отстой" я имел в виду только в том смысле, что "для этого проекта - отстой". Так-то наверное замечательная система. Изменено 21 Ноября 2015 пользователем Malandrinus Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
phorumer 3 081 Опубликовано 21 Ноября 2015 Поделиться Опубликовано 21 Ноября 2015 0x101DF506 6 ; Скриптовый коллбек (138 для CActor) на использование (но не посадку\выход) машины. Проверку на дистанцию делать в скриптах. Я правильно понимаю, что это можно использовать, например, для создания и использования багажника и пр.? И если да, то как эта правка примерно работает? Ковыряем "Новый Арсенал" Ссылка на комментарий
RayTwitty 509 Опубликовано 21 Ноября 2015 Поделиться Опубликовано 21 Ноября 2015 (изменено) Рациональней будет уже забить на XE и мутить дальше из исходников.Пока и в исходниках не получается)) Убил вчера весь день, но так и не понял как исправить. Причина не появления флара ясна - при вызове GamePersistent().Environment().Invalidate() сбрасывается стейт флара в none, процесс начинается сначала и так на постоянном обновлении. В то же время, в ЧН\ЗП код такой же, однако всё работает. И если да, то как эта правка примерно работает?Так же, как колбек на юз. Изменено 21 Ноября 2015 пользователем RayTwitty 1 Ссылка на комментарий
RayTwitty 509 Опубликовано 21 Ноября 2015 Поделиться Опубликовано 21 Ноября 2015 (изменено) Итого, примерно двое суток потребовалось для выяснения причины отсутствия солнца в ТЧ. Как выяснилось, в ЗП game_cl_GameState::net_import_GameTime вообще не вызывается, следовательно -> нет вызова GamePersistent().Environment().Invalidate() -> нет сброса текущего стейта флара. Путем отладки было также выяснено, что Invalidate() в ЗП отрабатывает ТОЛЬКО при вызове CEnvironment::SetWeather (а это именно та функция, которая экспортирована в level.set_weather), следовательно Invalidate() в ЗП вызывается только из скриптов и только вполне определенное количество раз (а не на апдейте, как в ТЧ). Таким образом, выпиливание вызова из net_import_GameTime - это правильный шаг, правка абсолютно корректна. Но для этой правки требуется скриптовая доделка, в виде установки погоды из скрипта после загрузки сейва (очевидно, в ЗП эту функцию выполняет система динамической погоды), однако у меня нормально погода устанавливается только на первом апдейте актора, на спавне почему-то не хочет. Собственно, в OGSE и не было проблем потому, что там идет полное управление погодой из скрипта. З.Ы. на счет net_import_GameTime - можно было конечно поступить как в ЗП, убрать вообще вызов этой функции (а точнее убрать экспорт), но это уже серьезные вмешательства в работу системы клиент-сервера, неизвестно к чему это приведет - в ЗП все-таки там основательно все переделали... Изменено 21 Ноября 2015 пользователем RayTwitty Ссылка на комментарий
RayTwitty 509 Опубликовано 22 Ноября 2015 Поделиться Опубликовано 22 Ноября 2015 (изменено) Обнаружил два колбека с одинаковыми номерами:debug_fixes.asm 185 строка - CALL_ACTOR_CALLBACK_INT_INT 153, edx, eax по умолчанию не вызывается, используется в OGSE.stalker_fix.asmhttps://code.google.com/p/xray-extensions/source/diff?spec=svn152&r=152&format=side&path=/trunk/3312_shoc_10006/stalker_fix.asmвызывается, используется вроде бы в модификации Lost World.Не критично, так как первый закомментирован, но все-таки не мешало бы поменять номер у дебагового, мало ли что.З.Ы. вообще, надо было наверно с самого начала проекта в отдельный файл выписывать дефайны с номерами используемых колбеков, чтобы каждый раз не гадать, какой номер свободен. Изменено 22 Ноября 2015 пользователем RayTwitty Ссылка на комментарий
phorumer 3 081 Опубликовано 24 Ноября 2015 Поделиться Опубликовано 24 Ноября 2015 Так же, как колбек на юз. В общем задействовал я этот колбек на юз. За основу определения дистанции и направления взял схему из ОГСЕ. Примерно в 90% случаев работает нормально, однако при определенных ракурсах одновременно происходит и юзание машины и посадка в нее. Отсюда вопрос: движок как-то определяет, что надо делать в в конкретном случае - юзать или аттачить или просто смотрит на расстояние до дверей, указанных в doors визуального конфига машины и одновременно вызывает и пользование и посадку?. Также попробовал колбеки на посадку/высадку (attach_vehicle, detach_vehicle), но что-то они ничего не делают, вернее с ними всё вообще перестает работать. Ковыряем "Новый Арсенал" Ссылка на комментарий
RayTwitty 509 Опубликовано 24 Ноября 2015 Поделиться Опубликовано 24 Ноября 2015 (изменено) Примерно в 90% случаев работает нормально, однако при определенных ракурсах одновременно происходит и юзание машины и посадка в нее. Ну, судя по описанию правки, колбек должен вызываться только при юзе без посадки. Либо правка некорректна, либо неправильно применяете. Т.е. тут надо не запутаться - в оригинале есть колбек на юз для машины, а в ХЕ добавился колбек на юз машины для актора. или просто смотрит на расстояние до дверей, указанных в doors визуального конфига машины и одновременно вызывает и пользование и посадку?. Расстояние до дверей + замороченный алгоритм определения, что смотрим именно в зону нахождения двери. А проверять, то что актор не сел, у меня получалось путем вызова not db.actor:get_current_holder() после отработки стандартного колбека на юз для машины. Изменено 24 Ноября 2015 пользователем RayTwitty Ссылка на комментарий
phorumer 3 081 Опубликовано 24 Ноября 2015 Поделиться Опубликовано 24 Ноября 2015 @RayTwitty, ну значит я наверное неправильно сделал. Я сделал биндер для машин и там сделал колбек на юз. А выходит нужно было его ставить актору? Ковыряем "Новый Арсенал" Ссылка на комментарий
RayTwitty 509 Опубликовано 24 Ноября 2015 Поделиться Опубликовано 24 Ноября 2015 (изменено) @phorumer, да, 138 колбек ставится актору - http://code.google.com/p/xray-extensions/wiki/new_collbacks аргумент - машина которую юзаем. Изменено 24 Ноября 2015 пользователем RayTwitty Ссылка на комментарий
phorumer 3 081 Опубликовано 24 Ноября 2015 Поделиться Опубликовано 24 Ноября 2015 @RayTwitty, ну тогда буду переделывать . Колбек называется use_vehicle? Ковыряем "Новый Арсенал" Ссылка на комментарий
RayTwitty 509 Опубликовано 24 Ноября 2015 Поделиться Опубликовано 24 Ноября 2015 @phorumer, по дефолту никак не называется, просто пиши 138. Ссылка на комментарий
phorumer 3 081 Опубликовано 25 Ноября 2015 Поделиться Опубликовано 25 Ноября 2015 @RayTwitty, ну в общем переделал с использованием новых колбеков. Работает нормально. Правда от схемы определения действий в зависимости от направления и расстояния пришлось отказаться ввиду ее замудренности. Вместо этого сделал меню как в ЛА. Спасибо за помощь и советы. Ковыряем "Новый Арсенал" Ссылка на комментарий
redpython 11 Опубликовано 26 Ноября 2015 Поделиться Опубликовано 26 Ноября 2015 Хоть это и не моё дело совершенно. но не могу не влезть, ибо использую хг уже давно и даже не для кода [...] Я мало про них знаю. Ну вот открываю вики, читаю слова: [...] Меркуриал как раз отлично подходит. Не надо читать вики, надо просто попробовать, и всё понравится. 1 хранилище утилит и прибежище описаний не стесняйтесь, добавляйте полезную информацию Ссылка на комментарий
phorumer 3 081 Опубликовано 27 Ноября 2015 Поделиться Опубликовано 27 Ноября 2015 Хочу включить слот детектора без включения остальных слотов для ОГСЕ. Так как в ассемблере мягко говоря не силен решил спросить: 1) Если я в соответствующих местах в new_engine_slots.asm уберу ifdef OGSE_BUILD и соответственно endif для детектора, то будет ли это так работать? 2) Если на первый вопрос ответ да, то что делать вот с этим куском: ifdef OGSE_BUILD sub eax, 2 jz short is_detector ; eax == 8 sub eax, 1 else sub eax, 3 endif Ковыряем "Новый Арсенал" Ссылка на комментарий
RayTwitty 509 Опубликовано 27 Ноября 2015 Поделиться Опубликовано 27 Ноября 2015 (изменено) 1) Если я в соответствующих местах в new_engine_slots.asm уберу ifdef OGSE_BUILD и соответственно endif для детектора, то будет ли это так работать?Да, только там не во всех местах перед дефайнами написано "detector". Надо смотреть куда ведут метки. В 269 строке надо тоже дефайн поправить. 2) Если на первый вопрос ответ да, то что делать вот с этим куском:Поставить ifndef OGSE_BUILD например. Изменено 27 Ноября 2015 пользователем RayTwitty 1 Ссылка на комментарий
TIGER_VLAD 361 Опубликовано 27 Ноября 2015 Поделиться Опубликовано 27 Ноября 2015 (изменено) Всем привет. Интересует можно ли с помощью этого проекта правильно рассчитать хит нанесенный актору и узнать тип хита ? Вот недавно @RayTwitty кидал stalker_fix.asm. Нашел там такие строки ... cmp [esp+58h+var_14], 9 ; if (HDS.hit_type == ALife::eHitTypeWound_2) //тип хита? ... jnz short lab2 ; if(ALife::eHitTypeBurn != HDS.hit_type) ... call CDamageManager__HitScale ; CDamageManager::HitScale(HDS.boneID, conditions().hit_bone_scale(), conditions().wound_bone_scale(), pHDS->aim_bullet) // Вот это тоже интересует, я так понимаю расчет хита? conditions().hit_bone_scale() // А что это такое? Расчет хита по определенной кости ГГ? Изменено 27 Ноября 2015 пользователем TIGER_VLAD Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти