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

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

Если проверку на взятие предмета в инвентарь ГГ тебе нужно проверять только после получения инфопоршна "vzial", так.

Так он вроде бы просил что бы скрипт выполнялся после взятия предмета либо получении инфопоршня... 

 

В этом варианте:

if has_alife_info("infoportion") then
        --твой скрипт
end 

получается, что "если будет обнаружен инфопоршень такой то..., то(затем) соот. последует выполнение какого то его скрипта конец функции..."

можно еще как нибудь так замутить:

function имя()
if db.actor:object ("секция предмета") ~= nil then -- проверяем наличие предмета у ГГ.
db.actor.give_infoportion("инфопорция") -- выдаем инфопорцию.
end
end
Вместо выдачи инфопорции можно также назначить выполнение скрипта, или по выдаче ее активировать скрипт через инфопоршень... <action>имя_файла.имя_функции</action> 
Изменено пользователем losiara

Жизнь следует измерять поступками, а не временем...

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

можно еще как нибудь так замутить:

 

Конечно, можно. Только надо учитывать, что функция-обработчик взятия предмета в инвентарь будет срабатывать в биндере актёра только в момент пополнения инвентаря после получения инфопоршна. В твоём варианте обработка всего инвентаря актёра (хотя и неявно) будет обрабатываться непрерывно, как только будет получен инфопоршн. В общем-то некритично, конечно - кому как...

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

Кто-нибудь может подсказать, как подключить luaxml?

Я сделал просто, скопировал все файлы в bin, вот они: http://hkar.ru/HGkt

Потом на первом апдейте актора проверяю по примеру:

	require("LuaXML")
	-- load XML data from file "test.xml" into local table xfile
	local xfile = xml.load("test.xml")
	-- search for substatement having the tag "scene"
	local xscene = xfile:find("scene")
	-- if this substatement is found...
	if xscene ~= nil then
	  --  ...print it to screen
	  debug_info.stip("xml" .. xscene)
	  --  print attribute id and first substatement
	  debug_info.stip("xml" ..  tostring(xscene.id) .. tostring(xscene[1]) )
	  -- set attribute id
	  xscene["id"] = "newId"
	else
		debug_info.stip("xml nod not found")
	end 

Но апдейт вешается на строке с загрузкой xml.load.

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

но ведь функции

 

function have_090()
 
if db.actor:object ("tol") ~= nil then -- проверяем наличие предмета у ГГ.
db.actor.give_infoportion("vzial") -- выдаем инфопорцию.
end
end

 

 

и

 

function 090 () 

if has_alife_info("vzial")  then
     имя скрипта. имя функции
 
 
end

 

не активируются диалогами, как их запустить?

Возникла задача после взятия предмета выдать инфопоршень, далее при наличие этого инфопоршна заспавнить нпс.Я  создал два файла с функциям. Но они не работают.  Пробовал проверить функцию выдачи нфопоршня после взятия предмета диалогом который активируется только при наличии этого инфопоршня, диалога нет(это значит что функция не сработала?).

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

но ведь функции ...  и ... не активируются диалогами, как их запустить?

 

Любую функцию можно вызвать из диалога.

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

Изменено пользователем =VENOM=
Ссылка на комментарий

Если уж на то пошло, в сталкере в 99.9% случаев инфопоршни совершенно не нужны, для решения тех задач, для которых они обычно применяются.

@нерон, вам бы лучше детально, подробно изложить что же вы все таки пытаетесь сделать, что и после чего/при каких условиях должно происходить. А заодно обратить внимание на функции для вывода информации в лог, чтобы лучше понимать что и где на самом деле у вас срабатывает а что нет.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

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

мне необходимо выполнить такую конструкцию. после взятия предмета должен выдаться инфопоршень(который судя по всему не выдается.)

function have_090()
 
if db.actor:object ("tol") ~= nil then -- проверяем наличие предмета у ГГ.
db.actor.give_infoportion("vzial") -- выдаем инфопорцию.
end
end

 

 

далее должен сработать скрипт который проверяет инфопоршень и спаунит за спиной у гг нпс. Диалогов при этом нет . В итоге гг берёт предмет, а за спиной у него уже стоит нпс.

 

 А заодно обратить внимание на функции для вывода информации в лог, чтобы лучше понимать что и где на самом деле у вас срабатывает а что нет.

 

это как сделать? Я проверял  выполнение функции так : прописывал с каким-нибудь нпс диалог который должен появится  при условии наличия инфопоршня.

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

мне необходимо выполнить такую конструкцию

 

1. Открой файл bind_stalker. script, и замени стандартную функцию на эту - почти так же, как было описано выше:

function actor_binder:on_item_take (obj)
 level_tasks.proceed(self.object)
 --game_stats.update_take_item (obj, self.object)
 if neron_script then
  neron_script.check_item_and_spawn_npc(obj)
 end
end

2. Создай в папке scripts\ файл neron_script.script - здесь будут храниться все (ну, или почти все) твои скрипты.

3. Скопируй в этот файл эту функцию:

function check_item_and_spawn_npc(item)
 if item:section() == "tol" then
  local actor = db.actor
  local dist = -3
  local pos = actor:position()
  local dir = actor:direction()
  pos = pos:add(dir:mul(dist))
  local npc = alife():create("generic_stalker", pos, actor:level_vertex_id(), actor:game_vertex_id())
  actor:give_info_portion("vzial")
 end
end

4. Вместо "generic_stalker" вставь того NPC, которого ты хочешь создать за спиной у ГГ.

Значение "-3" - это дистанция (в игровых метрах), на которой NPC будет создан за спиной у ГГ - её можно изменять.

Инфопрошн "vzial" тоже будет получен - правда, я не совсем понимаю, зачем это нужно. Если только для каких-то последующих проверок, событий и т.д...

В результате, как только ГГ подберёт предмет "tol", за спиной, на расстоянии 3-х метров у него возникнет NPC, и будет получен инфопоршн "vzial".

Если что-то пойдёт не так, или что-то непонятно, уточняй.

Изменено пользователем =VENOM=
Ссылка на комментарий

В итоге, что же все-таки должно произойти?

В итоге гг берёт предмет, а за спиной у него уже стоит нпс.

 

Вот просто это?

взял предмет - за спиной появился НПС. Так не нужны здесь никакие инфопоршни (как и следовало ожидать), и проверять наличие предмета не надо, раз актор его только в этот момент берет - при взятии и проверять, тот предмет или не тот.

Взятие предмета это on_item_take в биндере актора. в bind_stalker.script стало быть.

 

Хотя это конечно мои догадки, вообще-то. может быть совсем не это требовалось, и трехступенчатая конструкция с выдачей инфопоршня и тут же проверкой его наличия (на апдейте всю игру проверять же, да?) зачем-то таки нужна.

Edit ну вот пока писал уже за меня все разжевали.

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на 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.

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

@нерон

Попробую добавить к вышесказанному - ф-цию стоит поправить, добавив пропущенный аргумент и проверку инфо-порции, для блокировки возможного повторного срабатывания ф-ции и спавна дубликата непися:

function check_item_and_spawn_npc(item)
     local actor = db.actor
     if item:section() == "tol" and actor:dont_has_info("vzial") then
          local dist = -3
          local pos = actor:position()
          local dir = actor:direction()
          pos = pos:add(dir:mul(dist))
          local npc = alife():create("generic_stalker", pos, actor:level_vertex_id(), actor:game_vertex_id())
          actor:give_info_portion("vzial")
     end
end
Ссылка на комментарий

 Все переделал ,но есть вылет

Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : D:\xray-svn\xr_3da\xrGame\script_engine.cpp
Line          : 70
Description   : <no expression>
Arguments     : LUA error: ...games\stalker\gamedata\scripts\agroprom_tasks.script:73: attempt to index field 'actor' (a nil value)

 
но в том файле вот эта функция , вроде та что я заменил.

function have_quest_case_02(task, objective)
return db.actor:object("quest_case_02") ~= nil
end

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

Если предмет "tol" - уникальный, то необходимости в проверке инфопрошна нет, как и в самом инфопоршне тоже.

Пропущенный аргумент?

Кстати, функция спонит NPC по lv и gv актёра - если недалеко, это некритично (и если нет резких перепадов геометрии уровня, и если ГГ не стоит спиной впритирку к стене). К тому же, если понадобится бОльшее расстояние, придётся дополнительно вычислять lv точки спона.

 

 

но в том файле вот эта функция , вроде та что я заменил.

Это функция относится к заданию на документы военных на Агропроме. Ты её не менял? Проверь ещё раз, всё ли правильно скопировал из примеров.

Изменено пользователем =VENOM=
Ссылка на комментарий

 нерон

Все можно упростить, если я понял правильно, то необходим спавн непися по получении инфопоршня при взятии предмета???

Тогда можно сделать так:

function have_090()
if db.actor:object ("tol") ~= nil then -- проверяем наличие предмета у ГГ.
db.actor.give_infoportion("vzial") -- выдаем инфопорцию.
end
end

Далее создаешь логику непися какая у тебя будет не знаю валкера например да хоть ремарк не важно и добавь туда условия спавна в самый верх файла по типу:

[spawner]
cond = {+vzial}

logic....
.....и т. д.

Таким образом получится следующее, взял свой предмет - выдается инфопорция - спавнится непись(группа НПС...)

Ифопорцию прописать еще не забыть надо в соот. файле!!!

 

Что же касается биндера, то я бы его вообще не трогал, без надобности, тем более если не совсем понимать куда и что вставлять...))))) Желательно по упрощенной схеме все сделать!!!

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

Жизнь следует измерять поступками, а не временем...

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

 

 

[tol]:identity_immunities
GroupControlSection = spawn_group
discovery_dependency = 
$spawn = "devices\quest_items\decoder_documents"
;$prefetch = 32
class = II_ATTCH
cform = skeleton
visual = equipments\item_document_01.ogf
radius = 1
;script_binding = stalker.object_init
 
 
inv_name = tol
inv_name_short = tol
description = tol_descr
inv_weight = 0
 
inv_grid_width = 2
inv_grid_height = 1
inv_grid_x = 6
inv_grid_y = 19
cost = 0

 

 

Мой предмет это изменённый профиль  от

[pri_decoder_documents]:identity_immunities
GroupControlSection = spawn_group
discovery_dependency = 
$spawn = "devices\quest_items\decoder_documents"
;$prefetch = 32
class = II_ATTCH
cform = skeleton
visual = equipments\item_document_01.ogf
radius = 1
;script_binding = stalker.object_init
quest_item = true
 
description = item_docs_hiden_pri_desc
 
inv_name = item_docs_hiden_pri_name
inv_name_short = item_docs_hiden_pri_name
inv_weight = 0
 
inv_grid_width = 2
inv_grid_height = 1
inv_grid_x = 6
inv_grid_y = 19
cost = 0

 

 

Я создал новые документы и вроде из тех что на агропроме брать надо. Что- то видимо напортачил, Другие функции не трогал, только создал спаун с со своими доками.

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

 

 

Ифопорцию прописать еще не забыть надо в соот. файле!!!

 то в файле где инфопоршни лежат? или что иное?

файл скрипта спавна вот.

function polucil ()
 alife():create("tol",vector():set(112.99296569824,-1.9373573064804,1.577552318573),413895,117) 
 end

спавнятся после диалога. Нужно расписать сам квест?

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

Да вроде всё в норме...

 

 

то в файле где инфопоршни лежат? или что иное?

Да, сам новый инфопоршн "vzial" ты прописал в файле с какими-нибудь другими инфопоршнами, например, в info_portions.xml?

Ах, да, ещё - какого NPC ты создаёшь - вместо "generic_stalker"? И нужна ли ему логика, или это простой одноразовый враг-"болванчик"?

Изменено пользователем =VENOM=
Ссылка на комментарий

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

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

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

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

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

Войти

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

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

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