AndrewMor 530 Опубликовано 8 Июля 2016 Функция прекрасно срабатывает вблизи ящика, но не работает если мы далеко Функция прекрасно работает и далеко от ящика. Но предмет в ящике не сохраняется, если сделать сейв и потом его загрузить. Мне посоветовали делать так, и все прекрасно работает. function spawn_docs() local sobj = alife():object("heli_seif") if sobj and has_alife_info("take_zver_message") then local obj = level.object_by_id(sobj.id) if obj then spawn_item_in_inv("access_card", obj) spawn_item_in_inv("journal", obj) end end end function spawn_item_in_inv(spawn_item,npc) if not npc then npc = db.actor end local item = alife():create(spawn_item, npc:position(), npc:level_vertex_id(), npc:game_vertex_id(), npc:id()) if npc:id() ~= db.actor:id() then -- Фикс пропадания доспавненного предмета при сейв/лоаде level.client_spawn_manager():add(item.id, -1, fix_spawn_item_in_inv, npc) -- Калбек на выход item в онлайн end return item end function fix_spawn_item_in_inv(npc, id, item) npc:transfer_item(item, npc) end Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 9 Июля 2016 Прошу помощи. Написал диалог, на первый взгляд, вроде все правильно. <dialog id="job_juk_dialog"> <phrase_list> <phrase id="0"> <text>job_juk_dialog_0</text> <next>1</next> </phrase> <phrase id="1"> <text /> <next>111</next> <next>121</next> <next>131</next> </phrase> <phrase id="111"> <text /> <precondition>zaton_dialog.bandits_death</precondition> <next>11</next> </phrase> <phrase id="121"> <text /> <precondition>zaton_dialog.killers_death</precondition> <next>12</next> </phrase> <phrase id="131"> <text /> <precondition>zaton_dialog.all_alive</precondition> <next>13</next> </phrase> <phrase id="11"> <text>job_juk_dialog_11</text> <next>21</next> </phrase> <phrase id="12"> <text>job_juk_dialog_12</text> <next>22</next> </phrase> <phrase id="13"> <text>job_juk_dialog_13</text> <action>dialogs.break_dialog</action> </phrase> <phrase id="21"> <text>job_juk_dialog_21</text> <next>311</next> <next>312</next> </phrase> <phrase id="311"> <text>job_juk_dialog_311</text> <give_info>job_kill_bandits</give_info> <action>dialogs.break_dialog</action> </phrase> <phrase id="312"> <text>job_juk_dialog_312</text> <action>dialogs.break_dialog</action> </phrase> <phrase id="22"> <text>job_juk_dialog_22</text> <next>321</next> <next>322</next> </phrase> <phrase id="321"> <text>job_juk_dialog_321</text> <give_info>job_kill_killers</give_info> <action>dialogs.break_dialog</action> </phrase> <phrase id="322"> <text>job_juk_dialog_322</text> <action>dialogs.break_dialog</action> </phrase> </phrase_list> </dialog> Но при клике на первую фразу - вылет. Что тут не так? stack trace: 001B:0076105B xrLUA.dll001B:02DCE637 xrGame.dll001B:02DD20A0 xrGame.dll Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 10 Июля 2016 Почему не поставил прекондишен сразу перед фразой (зелёным выделено) и убрать не нужную секцию ? Опытным путем выяснил, что вылет идет из-за precondition, если его убрать(закомментировать) - все работает. Тады вопрос: почему? function bandits_death(actor, npc) if not has_alife_info("job_kill_bandits") then return true end return false end Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 10 Июля 2016 Ну так что не ясно: видимо условие в прекондишене не выполняется В том-то и дело, что условие выполняется. Ну в общем, я плюнул и сделал все по другому. Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 10 Июля 2016 просто поменял все имена esc_unik_npc на gan_store и выбивает ошибку вот лог Значит, не везде поменял Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 11 Июля 2016 (изменено) Словил вылет: Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...shing\s.t.a.l.k.e.r\gamedata\scripts\xr_logic.script:614: attempt to call field '?' (a nil value) Ругается на строчку (выделена красным жирным) if infop.params then xr_effects[infop.func](actor, npc, infop.params) else xr_effects[infop.func](actor, npc) end в функции pick_section_from_condlist(actor, npc, condlist). В чем может быть причина? Изменено 11 Июля 2016 пользователем Eugen81 Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 11 Июля 2016 (изменено) @naxac, Спасибо, сам домыслил. Хотел отписаться, а мне уже ответили. Еще вопрос: Удаляю труп: if obj.m_story_id == 54554 then alife():release(obj, true) end Удаляется отлично. Прописываю условие if obj.m_story_id == 54554 and has_alife_info("test_bubna_off") then alife():release(obj, true) end В логику пишу [known_info] test_bubna_off Обыскиваю труп, удаляю - не удаляется, хоть тресни. Что не так? Изменено 11 Июля 2016 пользователем AndrewMor Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 12 Июля 2016 (изменено) А функцию удаления ты как вызываешь ? Судя по if ... явно подсадил на какой-то апдейт ? Не знаю как это прозвучит, может кощунствено, но ты пытаешься удалить труп находясь В трупе. Ты получаешь поршень при обыске трупа и тут же срабатывает вызов удаления. Само собой оно ничего не удалит. Пробуй вызвать функцию из диалога с НПСом например или по рестру, после обыска трупа - тогда точно сработает. В том-то и беда, что поршень не выдается. А удаление вызываю из меню кнопкой, стоя РЯДОМ с трупом (пробую ). Если прописать любой выданный поршень - удаляет, как миленького. Не выдается нужный инфо при обыске, а вот почему - непонятно. Изменено 12 Июля 2016 пользователем AndrewMor Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 12 Июля 2016 А труп у тебя как заспавнен, скриптом или оллспавном ?Что в кастом_дате ? Ты точно уверен, что поршня нет ? Пропиши на этот поршень любой таск из текущих. Заспавнен не труп, а живой сталкер оллспавном. Я его убиваю, обыскиваю, а поршень не выдается, неясно - почему. Сталкер имеет свою логику, анимки, звуки, пути - все прекрасно пашет. А логику смогу вечером выложить, когда буду дома. Я так понял это в Sound Editor нужно делать? Да. Хотя есть и сторонние проги. Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 12 Июля 2016 Можно воспользоваться программой попроще, SAVandT называется. Ага, я про нее и говорил. BFG, логика сталкера. [logic] active = walkeron_death = death[walker]path_walk = predbannik_bubna1_walkpath_look = predbannik_bubna1_lookon_actor_dist_le_nvis = 30| remark@pred_bubna1on_info = {+bubna_first_dialog} walker@pred_bubna3[remark@pred_bubna1]anim = hellosnd = pred_bubna_hellotarget = actoron_signal = sound_end| walker@pred_bubna2[walker@pred_bubna2]path_walk = predbannik_bubna1_walkpath_look = predbannik_bubna1_lookmeet = meet@bubnaon_info = {+bubna_first_dialog} walker@pred_bubna3[walker@pred_bubna3]path_walk = predbannik_bubna2_walkpath_walk = predbannik_bubna2_look[meet@bubna]meet_state = 15|guard@waitmeet_state_wpn = 15|backoff@threat_weapvictim = 15|actorvictim_wpn = 15|actoruse = trueuse_wpn = falsesyndata = backoff@threat_weapmeet_dialog = predbannik_bubna_dialog[death]on_info = %+agr_krot_dead +sar2_death_19%[known_info]test_bubna_off Сталкеры, а секция [known_info] вообще из файла логики читается? Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 12 Июля 2016 (изменено) @dsh, вот именно. То-то у меня инфопоршень при обыске трупа не выдавался. Теперь ясно. BFG, из кастом_даты, я согласен. Но в оллспавне в кастом_дате только ссылка на файл логики. И значит, писать в логике секцию known_info в конфиге бессмысленно, так получается? Изменено 12 Июля 2016 пользователем AndrewMor Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 15 Июля 2016 Кто подскажет, как отловить момент создания аномалии при активации артефакта? И как ее через некоторое время убрать/деактивировать? Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 15 Июля 2016 (изменено) Через биндер - на net_spawn'е - можно отловить выход аномалии в онлайн. Был бы очень признателен за примерчик Удалить можно через таймер - если в моде есть таймеры на подобии амк-шных. Тоже про таймеры подумал, как раз АМК-шные таймеры и имеются. Изменено 15 Июля 2016 пользователем AndrewMor Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 15 Июля 2016 биндер - это скриптовый класс, наследуемый от движкового класса object_binder, который можно "прикреплять" к клиентским объектам. Подробнее можно почитать здесь. Его метод nеt_spawn срабатывает при выходе объекта в онлайн. Что такое биндер, я знаю. Не совсем понятно, как именно отловить активацию конкретного арта и появление конкретной аномалии, для чего и просил поделиться примером. Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 15 Июля 2016 Ведь ее что-то создает. Вот этот момент, вероятно, тебе и нужен. По логике, объект (артефакт) в момент создания аномалии уничтожается, наверно по этому пути надо идти. Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 15 Июля 2016 Его нужно бросить, Положить в пистолетный слот и бросить, как гранату. В месте падения образуется аномалия. Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 15 Июля 2016 Ну значит отслеживать, когда перестал существовать арт из пистолетного слота, и появилась аномалия. Алгоритм понятен. Непонятно, как это ручками сделать. :?)) Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 17 Июля 2016 У тебя уже есть скрипт, который отслеживает артефакт и когда его бросают, создает аномалию. Вот найди этот скрипт и добавь туда все, что тебе нужно. Вот я и не пойму, что это за скрипт, как обзывается. Если что, мод на базе ОГСМ. Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 17 Июля 2016 А так, открой конфиг любого артефакта, который можно активировать, и посмотри наличие script_binding. Вот скрипт, который там указан, скорее всего активацией и занимается. А вот нет такого параметра, совсем нет. 2 Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение
AndrewMor 530 Опубликовано 17 Июля 2016 секция [af_base] И в [af_base] нету. [af_base]:identity_immunities hud = artefact_hudanimation_slot = 11allow_inertion = trueslot = 1attach_angle_offset = 0,0,0attach_position_offset = -0.1,-0.1,0attach_bone_name = bip01_rootinv_grid_width = 1inv_grid_height = 1belt = trueaf_actor_properties = onactor_properties = on[artefact_hud]orientation = 0, 0, 0position = 0, 0, 0visual = weapons\artefact\wpn_artefact_hud.ogfanim_idle = idleanim_idle_sprint = idle_sprintanim_hide = holsteranim_show = drawanim_activate = activate оригинале ТЧ у артефактов вообще не было биндера, насколько я помню. Не было. Походу и сейчас нету. Сталкер - наше всё! Поделиться этим сообщением Ссылка на сообщение