Это популярное сообщение. 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 Ссылка на комментарий
GGG_STALKER 0 Опубликовано 16 Июля 2021 Поделиться Опубликовано 16 Июля 2021 Я перешел на сборку макрона r232a пока ее хватает, не внимательно прочтал по началу ридмик нанобота что там это отключено и убил много времени на отладку скриптов, палить ахтора mine:explose(db.actor) чет мне не поравилось... Ссылка на комментарий
Labadal 68 Опубликовано 6 Августа 2021 Поделиться Опубликовано 6 Августа 2021 (изменено) возможно с помощью данной функции скриптово открыть окно торговли? (вызвав в диалоге с тем, с кем нужно открыть торговлю). Если да, то как? CUIDialogWnd*<trade_wnd> get_trade_wnd() Изменено 6 Августа 2021 пользователем Labadal God save Hatsune Miku! Ссылка на комментарий
naxac 2 447 Опубликовано 6 Августа 2021 Поделиться Опубликовано 6 Августа 2021 (изменено) @Labadal , local wnd = level.get_trade_wnd() if wnd and wnd:IsShown() then level.start_stop_menu(wnd, true) end Изменено 6 Августа 2021 пользователем naxac Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Labadal 68 Опубликовано 6 Августа 2021 Поделиться Опубликовано 6 Августа 2021 2 минуты назад, naxac сказал: @Labadal , local wnd = level.get_trade_wnd() if wnd and wnd:IsShown() then level.start_stop_menu(wnd, true) end local wnd = level.get_trade_wnd() if wnd and wnd:IsShown() then level.start_stop_menu(wnd, true) end Вызываю функцию из диалога, ничего не происходит, есть идеи? @naxac Попробовал так: function trade_init() local wnd = level.get_trade_wnd() if wnd and wnd:IsShown() then level.start_stop_menu(wnd, true) end end При вызове из диалога - ничего не происходит. Полагаю, что IsShown() - проверка открыто окно или нет. Если правильно полагаю, тогда понятно почему ничего не происходит, ведь в момент вызова торговля не открыта. Попробовал так: function trade_init() local wnd = level.get_talk_wnd() if wnd and wnd:IsShown() then level.start_stop_menu(level.get_trade_wnd(), true) end end То есть проверяю открыто ли в данный момент окно разговора, чтобы вызвать торговлю, и при вызове ловлю следующий вылет: Скрытый текст Expression : assertion failed Function : CUIWindow::SetParent File : E:\stalker\sources\trunk\xr_3da\xrGame\ui\UIWindow.cpp Line : 634 Description : !(m_pParentWnd && m_pParentWnd->IsChild(this)) На этом идеи кончились, в какую сторону думать? God save Hatsune Miku! Ссылка на комментарий
UriZzz 1 004 Опубликовано 6 Августа 2021 Поделиться Опубликовано 6 Августа 2021 @Labadal но ведь одно окно открыто - окно диалога. Думаю, его нужно закрыть, а потом открывать другое. Моя нычка, Нычка в арендованном у Опричника холодильнике Мы хорошие ребята, жаль патронов маловато:) Ссылка на комментарий
Labadal 68 Опубликовано 6 Августа 2021 Поделиться Опубликовано 6 Августа 2021 @UriZzz Думаешь, перед открытием окна торговли из окна диалога мне необходимо закрыть окно диалога? God save Hatsune Miku! Ссылка на комментарий
UriZzz 1 004 Опубликовано 6 Августа 2021 Поделиться Опубликовано 6 Августа 2021 @Labadal подозреваю. Вряд-ли получится открыть второе, если открыто первое. Моя нычка, Нычка в арендованном у Опричника холодильнике Мы хорошие ребята, жаль патронов маловато:) Ссылка на комментарий
Labadal 68 Опубликовано 6 Августа 2021 Поделиться Опубликовано 6 Августа 2021 @UriZzz не-а, в любом случае ловлю вылет Скрытый текст Expression : assertion failed Function : CUIWindow::SetParent File : E:\stalker\sources\trunk\xr_3da\xrGame\ui\UIWindow.cpp Line : 634 Description : !(m_pParentWnd && m_pParentWnd->IsChild(this)) В общем, играясь, до меня неожиданно дошло, что в чс можно назначить горячую клавишу на открытие окно торговли с помощью параметра accel. Скрытый текст В файлах talk.xml и talk_16.xml найти тег button и вписать в конце тега accel="Ваша клавиша". А затем, замечательной функцией, имеющейся в X-Ray extensions, имитирующей события нажатия кнопки send_event_key_press(int<DIK_keys>) можно открыть торговлю, вызвав функцию через диалог. level.send_event_key_press(DIK_keys.DIK_mouse4) И что самое замечательное, почему-то если назначить кнопку mouse4 (другие mouse кнопки не пробовал) - то при попытке отрыть торговлю, самому нажав клавишу mouse4 - торговля не откроется, но если открывать вышеуказанной функцией - то откроется. То есть, можно исключить открытие торговли актором у других нпс, которым ты не хочешь выдавать возможность торговли. God save Hatsune Miku! Ссылка на комментарий
Labadal 68 Опубликовано 13 Августа 2021 Поделиться Опубликовано 13 Августа 2021 Всем привет, у меня такой вопрос. Допустим, есть некая функция: function f_name() local target = level.get_target_obj() if target and IsStalker(target) then local name = target:chracter_name() end end То есть, в переменную target мы поместили игровой объект и если этот объект - Сталкер, мы получаем его имя. Если вызывать из апдейта биндсталкер, все работает прекрасно, но если вызывать из файл: xr_motivator.script функция: function motivator_binder:death_callback(victim, who) То сама функция level.get_target_obj() работает как-то через раз. То есть, вызывая свою функцию из xr_motivator.script я подразумеваю, что она будет воспроизводиться всякий раз, когда гг убьёт непися. Так вот, при каждом убийстве непися актором, мне нужно получать имя убитого нпс. Но level.get_target_obj() в этом случае работает через раз, один раз возвращает объект и его имя, а другой - ничего. что подскажете, господа? God save Hatsune Miku! Ссылка на комментарий
Zander_driver 10 334 Опубликовано 13 Августа 2021 Поделиться Опубликовано 13 Августа 2021 7 минут назад, Labadal сказал: Но level.get_target_obj() в этом случае работает через раз Эта функция возвращает объект, на который смотрит ГГ. С учетом того, что пули в сталкере летят с вполне ограниченной скоростью, на момент смерти НПСа, ГГ вполне может смотреть уже мимо, т.к. некая доля секунды с момента выстрела пройдет. Поэтому и "через раз". ГГ мог вообще гранату бросать за угол не глядя, что вам тогда вернет get_target_obj ? ничего, естественно. Только непонятно, зачем такие сложности с get_target_obj и чего ради. 10 минут назад, Labadal сказал: function motivator_binder:death_callback(victim, who) Почему бы не взять непися прямо отсюда? motivator_binder это как бы биндер нпс. И у него-то ссылка на забинденный объект, (self.object) всегда в наличии. 1 1 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Labadal 68 Опубликовано 13 Августа 2021 Поделиться Опубликовано 13 Августа 2021 @Zander_driver 43 минуты назад, Zander_driver сказал: ГГ мог вообще гранату бросать за угол не глядя, что вам тогда вернет get_target_obj ? ничего, естественно. А существует возможность сделать проверку, что нпс умер именно от гранаты? God save Hatsune Miku! Ссылка на комментарий
dsh 3 824 Опубликовано 13 Августа 2021 Поделиться Опубликовано 13 Августа 2021 В xray extensions есть before_hit коллбек или как он там называется. Вот в нем сохраняй, чем был нанесен последний хит и используй это в death_callback. 2 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Labadal 68 Опубликовано 14 Августа 2021 Поделиться Опубликовано 14 Августа 2021 @dsh А как получить то, чем был нанес последний хит перед тем, как сохранить? God save Hatsune Miku! Ссылка на комментарий
dsh 3 824 Опубликовано 14 Августа 2021 Поделиться Опубликовано 14 Августа 2021 (изменено) @Labadal там структура имеется, в которой есть соответствующие id. Возможно даже клиентские объекты, я уже не помню подробностей. @Labadal вот пример, где получается секция патронов, которыми был нанесен хит неписю https://github.com/dsh2dsh/op2ogse/blob/c9346e998b0ae700b20fb56f697a7d6be04213a0/gamedata/scripts/ogse_hitfx.script#L66 когда я ещё XE использовал. Изменено 14 Августа 2021 пользователем dsh 1 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Labadal 68 Опубликовано 15 Августа 2021 Поделиться Опубликовано 15 Августа 2021 @dsh Слушай, а ведь в мультиплеере, при убийстве показывает кого и из чего убил, нельзя использовать это, для определения оружия (или хотя бы типа хита), которым был убит нпс? God save Hatsune Miku! Ссылка на комментарий
Labadal 68 Опубликовано 25 Августа 2021 Поделиться Опубликовано 25 Августа 2021 Если я изменил в движке xrgame.dll (забиндил некоторые кнопки), как мне потом объединить его с XRE? Upd: я хочу перейти на движок 1.0007 со своими некоторыми правками, можно ли на него накатить XRE? Вот конкретней, что мне нужен. God save Hatsune Miku! Ссылка на комментарий
macron 1 884 Опубликовано 25 Августа 2021 Поделиться Опубликовано 25 Августа 2021 2 часа назад, Labadal сказал: Если я изменил в движке xrgame.dll (забиндил некоторые кнопки), как мне потом объединить его с XRE? Если правки были незначительные, допустим, несколько байт где-то, то обычно можно объединять. 2 часа назад, Labadal сказал: Upd: я хочу перейти на движок 1.0007 со своими некоторыми правками, можно ли на него накатить XRE? Нельзя, все байты другие. Разбираясь в хексе и зная нужное место из 1.0006, иногда можно найти аналогичное место в 1.0007 и вручную заменить конкретный байт для конкретной правки, если сильно повезет. Но вообще, кто компилирует движки из исходников обычно находят правки на разных репозиториях исходников, уже поправленных кем-то или делают сами. 2 1 Ссылка на комментарий
Labadal 68 Опубликовано 26 Августа 2021 Поделиться Опубликовано 26 Августа 2021 @macron А причем тут хекс? XRE ведь на ассемблере? А, все, дошло) Может, есть какой-то другой способ забиндить 6 кнопок, чтобы их можно было изменять в меню и остаться на XRE? God save Hatsune Miku! Ссылка на комментарий
macron 1 884 Опубликовано 5 Сентября 2021 Поделиться Опубликовано 5 Сентября 2021 26.08.2021 в 09:19, Labadal сказал: Может, есть какой-то другой способ забиндить 6 кнопок, Если шаришь в скриптах, то на XRE как-то можно скриптово кнопки биндить. Так, например, в OLR 2.5 клаксон работает. 26.08.2021 в 09:19, Labadal сказал: чтобы их можно было изменять в меню Ну это вообще "жырнота". 1 1 Ссылка на комментарий
Labadal 68 Опубликовано 22 Октября 2021 Поделиться Опубликовано 22 Октября 2021 @macron у меня забиндены через кейлоггер, но их, увы, не поменяешь) God save Hatsune Miku! Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти