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

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

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 / Начинающий игродел на Unreal Engine / Мимокрокодил.

Я понял что моя старая подпись что-то нарушает. Удалил все ссылки.

@Zander_driver 

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

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

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

God save Hatsune Miku!

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

  • Нравится 2

@dsh 

А как получить то, чем был нанес последний хит перед тем, как сохранить?

 

God save Hatsune Miku!

@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

@macron

у меня забиндены через кейлоггер, но их, увы, не поменяешь)

God save Hatsune Miku!

Всем привет! 
Возникла проблема, следующего рода: 
Я подключил ogse.dll, в _g.script следующим образом

-------------------------------------------------------------------------------
--                            OGSE.DLL                                       --
-------------------------------------------------------------------------------
local dir 		= "$fs_root$"
local ext_path 	= "bin\\extensions"
local path  	= getFS():update_path(dir, ext_path)

package.cpath = package.cpath..";"..path.."\\?.dll"

local function IsDll(fname)
	return fname:sub(-4) == ".dll"
end

if type(init_external_libs) == "function" then
	init_external_libs()
end

if not lfs then
	fail("check lfs namespace")
end
for file in lfs.dir(path) do
	log1("file: "..file)
	if file ~= "." and file ~= ".." then
		if IsDll(file) then
			local mod = file:sub(1, -5)
			log1("--try to load " .. file)
			log1("fname: "..mod)
			local rez, msg = pcall(require, mod)
			if (not(not rez)) then
				log1("~~    loaded")
			else
				log1("!!    error, msg : " .. tostring(msg))
			end
		end
	end
end
-------------------------------------------------------------------------------
--                            OGSE.DLL                                       --
-------------------------------------------------------------------------------

В самое начало добавил RvP() - уже и не помню что это, но без него не работает. 
Суть такая, что на статике данная фишка работает. И только, в случае запуска не на статике имею следующий вылет:

Expression    : assertion failed
Function      : 
File          : 
Line          : 0
Description   : extensions\ogse.dll

  Только сейчас проблему заметил, намекните, лечится? 

God save Hatsune Miku!

@Labadal , пробовал подключать либу указанным тобой способом, и у меня на любом рендере игра валится с таким логом. А ещё при этом постоянно вылазило окошко старфорса. Краш происходит на вызове init_external_libs().

 

Может, надо включить какие-то дополнительные правки в correction_list.ltx? Или exe'шник нужен лицензионный? Или ещё что? ogse.dll брал из dsh-мода, там же она, думаю, ничем от огсе'шной не отличается? Кто этим когда-нибудь занимался, поделитесь опытом пожалуйста.

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

Аддон для ОП-2.09.2: Яндекс/Google/GitHub/Тема на AP-PRO

naxac.gif

@naxac Я ещё установил какой-то пакет RvP, и в самом начале _g скрипта прописал RvP() - не помню, что это, но оно нужно. да, ogse.dll я сам брал из dsh мода. Нужна была функция, я кое-как подключил, спасибо dsh за советы. Моя задумка сработала, но потом я перешел на динамику, кое что потестить, и поймал вылет))

God save Hatsune Miku!

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

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

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

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

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

Войти

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

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

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