Перейти к контенту
Malandrinus

X-Ray extensions

Рекомендуемые сообщения

@GGG_STALKER , а ты попробуй вместо id инициатора передать, к примеру, 65535.

  • Согласен 1
  • Полезно 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif


Подарки

Ссылка на комментарий

Я перешел на сборку макрона r232a пока ее хватает, не внимательно прочтал по началу ридмик нанобота что там это отключено и убил много времени на отладку скриптов, палить ахтора mine:explose(db.actor) чет мне не поравилось...

Ссылка на комментарий

возможно с помощью данной функции скриптово открыть окно торговли? (вызвав в диалоге с тем, с кем нужно открыть торговлю). Если да, то как? 

CUIDialogWnd*<trade_wnd> get_trade_wnd()

Изменено пользователем Labadal

God save Hatsune Miku!


Подарки

  • Ссылка на комментарий

    @Labadal , 

      local wnd = level.get_trade_wnd()
      if wnd and wnd:IsShown() then
        level.start_stop_menu(wnd, true)
      end
    	
    Изменено пользователем naxac

    Аддон для ОП-2.09.2: Яндекс/Google/GitHub

    naxac.gif


    Подарки

    Ссылка на комментарий
    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!


    Подарки

  • Ссылка на комментарий

    @Labadal но ведь одно окно открыто - окно диалога. Думаю, его нужно закрыть, а потом открывать другое.

     Моя нычкаНычка в арендованном у Опричника холодильнике  

    Мы хорошие ребята, жаль патронов маловато:):ukostra:

    UriZzz.gif

    Ссылка на комментарий

    @UriZzz Думаешь, перед открытием окна торговли из окна диалога мне необходимо закрыть окно диалога? 

    God save Hatsune Miku!


    Подарки

  • Ссылка на комментарий

    @Labadal подозреваю.

    Вряд-ли получится открыть второе, если открыто первое.

     Моя нычкаНычка в арендованном у Опричника холодильнике  

    Мы хорошие ребята, жаль патронов маловато:):ukostra:

    UriZzz.gif

    Ссылка на комментарий

    @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!


    Подарки

  • Ссылка на комментарий

    Всем привет, у меня такой вопрос. 
    Допустим, есть некая функция: 

    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!


    Подарки

  • Ссылка на комментарий
    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 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

    Ссылка на комментарий

    @Zander_driver 

    43 минуты назад, Zander_driver сказал:

    ГГ мог вообще гранату бросать за угол не глядя, что вам тогда вернет get_target_obj ? ничего, естественно.

    А существует возможность сделать проверку, что нпс умер именно от гранаты?

    God save Hatsune Miku!


    Подарки

  • Ссылка на комментарий

    В xray extensions есть before_hit коллбек или как он там называется. Вот в нем сохраняй, чем был нанесен последний хит и используй это в death_callback.

    • Нравится 2
    Ссылка на комментарий

    @Labadal там структура имеется, в которой есть соответствующие id. Возможно даже клиентские объекты, я уже не помню подробностей.

    @Labadal вот пример, где получается секция патронов, которыми был нанесен хит неписю 

    https://github.com/dsh2dsh/op2ogse/blob/c9346e998b0ae700b20fb56f697a7d6be04213a0/gamedata/scripts/ogse_hitfx.script#L66

    когда я ещё XE использовал.

    Изменено пользователем dsh
    • Полезно 1
    Ссылка на комментарий

    @dsh Слушай, а ведь в мультиплеере, при убийстве показывает кого и из чего убил, нельзя использовать это, для определения оружия (или хотя бы типа хита), которым был убит нпс?

    God save Hatsune Miku!


    Подарки

  • Ссылка на комментарий

    Если я изменил в движке xrgame.dll (забиндил некоторые кнопки), как мне потом объединить его с XRE? 

    Upd:  я хочу перейти на движок 1.0007 со своими некоторыми правками, можно ли на него накатить XRE? Вот конкретней, что мне нужен.

    God save Hatsune Miku!


    Подарки

  • Ссылка на комментарий
    2 часа назад, Labadal сказал:

    Если я изменил в движке xrgame.dll (забиндил некоторые кнопки), как мне потом объединить его с XRE? 

    Если правки были незначительные, допустим, несколько байт где-то, то обычно можно объединять.

     

    2 часа назад, Labadal сказал:

    Upd:  я хочу перейти на движок 1.0007 со своими некоторыми правками, можно ли на него накатить XRE?

    Нельзя, все байты другие. Разбираясь в хексе и зная нужное место из 1.0006, иногда можно найти аналогичное место в 1.0007 и вручную заменить конкретный байт для конкретной правки, если сильно повезет. Но вообще, кто компилирует движки из исходников обычно находят правки на разных репозиториях исходников, уже поправленных кем-то или делают сами.

    • Согласен 2
    • Полезно 1
    Ссылка на комментарий

    @macron А причем тут хекс? XRE ведь на ассемблере?

    А, все, дошло)

    Может, есть какой-то другой способ забиндить 6 кнопок, чтобы их можно было изменять в меню и остаться на XRE?

     

    God save Hatsune Miku!


    Подарки

  • Ссылка на комментарий
    26.08.2021 в 09:19, Labadal сказал:

    Может, есть какой-то другой способ забиндить 6 кнопок,

    Если шаришь в скриптах, то на  XRE как-то можно скриптово кнопки биндить. Так, например, в OLR 2.5 клаксон работает.

     

    26.08.2021 в 09:19, Labadal сказал:

    чтобы их можно было изменять в меню

    Ну это вообще "жырнота".

    • Нравится 1
    • Смешно 1
    Ссылка на комментарий

    Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

    Комментарии могут оставлять только зарегистрированные пользователи

    Создать аккаунт

    Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

    Зарегистрировать новый аккаунт

    Войти

    Есть аккаунт? Войти.

    Войти
    • Недавно просматривали   0 пользователей

      Ни один зарегистрированный пользователь не просматривает эту страницу.

    AMK-Team.ru

    ×
    ×
    • Создать...