losiara 13 Опубликовано 31 Марта 2016 Поделиться Опубликовано 31 Марта 2016 (изменено) Если проверку на взятие предмета в инвентарь ГГ тебе нужно проверять только после получения инфопоршна "vzial", так. Так он вроде бы просил что бы скрипт выполнялся после взятия предмета либо получении инфопоршня... В этом варианте: if has_alife_info("infoportion") then --твой скрипт end получается, что "если будет обнаружен инфопоршень такой то..., то(затем) соот. последует выполнение какого то его скрипта конец функции..." можно еще как нибудь так замутить: function имя() if db.actor:object ("секция предмета") ~= nil then -- проверяем наличие предмета у ГГ. db.actor.give_infoportion("инфопорция") -- выдаем инфопорцию. end end Вместо выдачи инфопорции можно также назначить выполнение скрипта, или по выдаче ее активировать скрипт через инфопоршень... <action>имя_файла.имя_функции</action> Изменено 31 Марта 2016 пользователем losiara Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
naxac 2 441 Опубликовано 31 Марта 2016 Поделиться Опубликовано 31 Марта 2016 SetWndSize крашит игру Потому что в ТЧ нет такого метода в классе CUIStatic. Да и в других тоже. Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
=VENOM= 50 Опубликовано 1 Апреля 2016 Поделиться Опубликовано 1 Апреля 2016 можно еще как нибудь так замутить: Конечно, можно. Только надо учитывать, что функция-обработчик взятия предмета в инвентарь будет срабатывать в биндере актёра только в момент пополнения инвентаря после получения инфопоршна. В твоём варианте обработка всего инвентаря актёра (хотя и неявно) будет обрабатываться непрерывно, как только будет получен инфопоршн. В общем-то некритично, конечно - кому как... Ссылка на комментарий
dukekan 5 Опубликовано 1 Апреля 2016 Поделиться Опубликовано 1 Апреля 2016 Кто-нибудь может подсказать, как подключить 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. Ссылка на комментарий
нерон 0 Опубликовано 1 Апреля 2016 Поделиться Опубликовано 1 Апреля 2016 (изменено) но ведь функции 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 не активируются диалогами, как их запустить? Возникла задача после взятия предмета выдать инфопоршень, далее при наличие этого инфопоршна заспавнить нпс.Я создал два файла с функциям. Но они не работают. Пробовал проверить функцию выдачи нфопоршня после взятия предмета диалогом который активируется только при наличии этого инфопоршня, диалога нет(это значит что функция не сработала?). Изменено 1 Апреля 2016 пользователем нерон Ссылка на комментарий
=VENOM= 50 Опубликовано 1 Апреля 2016 Поделиться Опубликовано 1 Апреля 2016 (изменено) но ведь функции ... и ... не активируются диалогами, как их запустить? Любую функцию можно вызвать из диалога. Не совсем понятно: проверка наличия предмета в луте ГГ должна выполняться в диалоге (например, при получении предмета от NPC)? Или ГГ может просто подобрать предмет (взять из инвенторибокса -тайника, например)? В первом случае наличие предмета в луте ГГ легко проверить прямо в диалоге - прекондишном ветки диалога, с последующим получением инфопоршна и споном NPC. Во втором - как было описано выше, проверка при взятии предмета в лут ГГ с получением инфопоршна, после чего хоть в диалоге, хоть в активном таске можно спокойно заспонить NPC. Я подозреваю, что можно вообще обойтись без выдачи инфопоршна - если только он не нужен для каких-то дополнительных проверок? Изменено 1 Апреля 2016 пользователем =VENOM= Ссылка на комментарий
Zander_driver 10 333 Опубликовано 1 Апреля 2016 Поделиться Опубликовано 1 Апреля 2016 Если уж на то пошло, в сталкере в 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. Ссылка на комментарий
нерон 0 Опубликовано 1 Апреля 2016 Поделиться Опубликовано 1 Апреля 2016 (изменено) мне необходимо выполнить такую конструкцию. после взятия предмета должен выдаться инфопоршень(который судя по всему не выдается.) function have_090() if db.actor:object ("tol") ~= nil then -- проверяем наличие предмета у ГГ. db.actor.give_infoportion("vzial") -- выдаем инфопорцию. end end далее должен сработать скрипт который проверяет инфопоршень и спаунит за спиной у гг нпс. Диалогов при этом нет . В итоге гг берёт предмет, а за спиной у него уже стоит нпс. А заодно обратить внимание на функции для вывода информации в лог, чтобы лучше понимать что и где на самом деле у вас срабатывает а что нет. это как сделать? Я проверял выполнение функции так : прописывал с каким-нибудь нпс диалог который должен появится при условии наличия инфопоршня. Изменено 1 Апреля 2016 пользователем нерон Ссылка на комментарий
=VENOM= 50 Опубликовано 1 Апреля 2016 Поделиться Опубликовано 1 Апреля 2016 (изменено) мне необходимо выполнить такую конструкцию 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". Если что-то пойдёт не так, или что-то непонятно, уточняй. Изменено 1 Апреля 2016 пользователем =VENOM= Ссылка на комментарий
Zander_driver 10 333 Опубликовано 1 Апреля 2016 Поделиться Опубликовано 1 Апреля 2016 (изменено) В итоге, что же все-таки должно произойти? В итоге гг берёт предмет, а за спиной у него уже стоит нпс. Вот просто это? взял предмет - за спиной появился НПС. Так не нужны здесь никакие инфопоршни (как и следовало ожидать), и проверять наличие предмета не надо, раз актор его только в этот момент берет - при взятии и проверять, тот предмет или не тот. Взятие предмета это on_item_take в биндере актора. в bind_stalker.script стало быть. Хотя это конечно мои догадки, вообще-то. может быть совсем не это требовалось, и трехступенчатая конструкция с выдачей инфопоршня и тут же проверкой его наличия (на апдейте всю игру проверять же, да?) зачем-то таки нужна. Edit ну вот пока писал уже за меня все разжевали. Изменено 1 Апреля 2016 пользователем 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. Ссылка на комментарий
FonSwong 33 Опубликовано 1 Апреля 2016 Поделиться Опубликовано 1 Апреля 2016 naxac, в огсе шном lua_help прописано так-то Ссылка на комментарий
UnLoaded 313 Опубликовано 1 Апреля 2016 Поделиться Опубликовано 1 Апреля 2016 @нерон Попробую добавить к вышесказанному - ф-цию стоит поправить, добавив пропущенный аргумент и проверку инфо-порции, для блокировки возможного повторного срабатывания ф-ции и спавна дубликата непися: 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 Ссылка на комментарий
нерон 0 Опубликовано 1 Апреля 2016 Поделиться Опубликовано 1 Апреля 2016 Все переделал ,но есть вылет 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 Ссылка на комментарий
=VENOM= 50 Опубликовано 1 Апреля 2016 Поделиться Опубликовано 1 Апреля 2016 (изменено) Если предмет "tol" - уникальный, то необходимости в проверке инфопрошна нет, как и в самом инфопоршне тоже. Пропущенный аргумент? Кстати, функция спонит NPC по lv и gv актёра - если недалеко, это некритично (и если нет резких перепадов геометрии уровня, и если ГГ не стоит спиной впритирку к стене). К тому же, если понадобится бОльшее расстояние, придётся дополнительно вычислять lv точки спона. но в том файле вот эта функция , вроде та что я заменил. Это функция относится к заданию на документы военных на Агропроме. Ты её не менял? Проверь ещё раз, всё ли правильно скопировал из примеров. Изменено 1 Апреля 2016 пользователем =VENOM= Ссылка на комментарий
losiara 13 Опубликовано 1 Апреля 2016 Поделиться Опубликовано 1 Апреля 2016 (изменено) нерон Все можно упростить, если я понял правильно, то необходим спавн непися по получении инфопоршня при взятии предмета??? Тогда можно сделать так: function have_090() if db.actor:object ("tol") ~= nil then -- проверяем наличие предмета у ГГ. db.actor.give_infoportion("vzial") -- выдаем инфопорцию. end end Далее создаешь логику непися какая у тебя будет не знаю валкера например да хоть ремарк не важно и добавь туда условия спавна в самый верх файла по типу: [spawner] cond = {+vzial} logic.... .....и т. д. Таким образом получится следующее, взял свой предмет - выдается инфопорция - спавнится непись(группа НПС...) Ифопорцию прописать еще не забыть надо в соот. файле!!! Что же касается биндера, то я бы его вообще не трогал, без надобности, тем более если не совсем понимать куда и что вставлять...))))) Желательно по упрощенной схеме все сделать!!! Изменено 1 Апреля 2016 пользователем losiara Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
нерон 0 Опубликовано 1 Апреля 2016 Поделиться Опубликовано 1 Апреля 2016 [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 Я создал новые документы и вроде из тех что на агропроме брать надо. Что- то видимо напортачил, Другие функции не трогал, только создал спаун с со своими доками. Ссылка на комментарий
=VENOM= 50 Опубликовано 1 Апреля 2016 Поделиться Опубликовано 1 Апреля 2016 Нет, твои документы, судя по всему, созданы на основе "Документов из Припяти". А что за "спаун" с доками? Поподробнее бы... Ссылка на комментарий
нерон 0 Опубликовано 1 Апреля 2016 Поделиться Опубликовано 1 Апреля 2016 Ифопорцию прописать еще не забыть надо в соот. файле!!! то в файле где инфопоршни лежат? или что иное? файл скрипта спавна вот. function polucil () alife():create("tol",vector():set(112.99296569824,-1.9373573064804,1.577552318573),413895,117) end спавнятся после диалога. Нужно расписать сам квест? Ссылка на комментарий
=VENOM= 50 Опубликовано 1 Апреля 2016 Поделиться Опубликовано 1 Апреля 2016 (изменено) Да вроде всё в норме... то в файле где инфопоршни лежат? или что иное? Да, сам новый инфопоршн "vzial" ты прописал в файле с какими-нибудь другими инфопоршнами, например, в info_portions.xml? Ах, да, ещё - какого NPC ты создаёшь - вместо "generic_stalker"? И нужна ли ему логика, или это простой одноразовый враг-"болванчик"? Изменено 1 Апреля 2016 пользователем =VENOM= Ссылка на комментарий
нерон 0 Опубликовано 1 Апреля 2016 Поделиться Опубликовано 1 Апреля 2016 да "vzial" прописан. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти