Muzafir 19 Опубликовано 23 Августа 2020 У меня такая проблема. Создал новую группировку, она к ГГ нейтральна. Все вроде бы хорошо, но если бойца этой группировки ранят, он лежит просит аптечку, у ГГ в инвентаре аптечка есть, но диалога, чтобы ее отдать не появляется. Почему? Поделиться этим сообщением Ссылка на сообщение
Muzafir 19 Опубликовано 27 Августа 2020 Можете подсказать, где можно посмотреть, что к чему с этим dialog manager.ltx? Не очень понятно, что там писать. Создал новую группировку, у всех в профилях прописано #include "gameplay\character_dialogs.xml" или <actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog> - пробовал и так и так. Лечить бойцов все равно не возможно. Поделиться этим сообщением Ссылка на сообщение
Muzafir 19 Опубликовано 30 Августа 2020 Никак не могу довести до ума возможность поделиться аптечкой с бойцами новой группировки. Создал соответствующие секции в dialog_manager.ltx и stable_dialog_manager.ltx, фраза, прописанная там, появляется у НПС, когда нажимаешь "говорить", но у ГГ так и не высвечивается фраза с возможностью дать аптечку. Наверное, это прописывается где-то еще, потому что в этих файлах нашел только dm_help_thanks_1 - это, судя по всему, фраза благодарности за полученную аптечку. А дать-то ее ему как? Поделиться этим сообщением Ссылка на сообщение
Muzafir 19 Опубликовано 3 Сентября 2020 Привет всем. Я в СДК создал смарт-террейны, прописал логику НПС в Custom_data или, у кого посложнее, во внешнем файле. Все нормально работает. Есть ли смысл мне теперь писать gulag.ltx и gulag.script и переносить всю эту логику туда? Есть ли от этого реальная польза или это просто вопрос удобства? Кому что нравится? Поделиться этим сообщением Ссылка на сообщение
Muzafir 19 Опубликовано 3 Сентября 2020 1 час назад, HellRatz сказал: возможно играет на оптимизацию Вот этот момент, в основном, и интересует. Чего-то мне страшновато за гулаг.скрипт браться. Проще и нагляднее пересобрать спавн на локации и своими глазами увидеть, как перс отрабатывает логику. 1 Поделиться этим сообщением Ссылка на сообщение
Muzafir 19 Опубликовано 4 Сентября 2020 @HellRatz, отрабатывать, конечно, будет. Вопрос в том, зачем разрабы делали через gulag.ltx и gulag.script? Если это помогает оптимизации или еще чему, я попробую тоже заморочиться, если нет - то зачем? Итак все работает. Поделиться этим сообщением Ссылка на сообщение
Muzafir 19 Опубликовано 7 Сентября 2020 10 часов назад, AndreySol сказал: персональная логика есть очень неудобное дело, особенно если мобу планируется интенсивное перемещение по локации\локациям. Я как раз, наоборот, думал через гулаг раздать работы "рядовым" НПС (охрана лагеря, "сидельцы" у костра и т.д.). Ну а квестовым - персональную. Так, вроде, и разрабы делали. Но спасибо, за совет, твоя логика понятна. Поделиться этим сообщением Ссылка на сообщение
Muzafir 19 Опубликовано 16 Сентября 2020 Подскажите, xxx_gulag.script и gulag_xxx.script нужно где-то регистрировать (типа system.ltx)? Попробовал перенести работающую логику из кастом даты персонажей в эти файлы, нпс стали вести себя, как отпущенные на волю алайфа. Кто в лес, кто под дрова. Поделиться этим сообщением Ссылка на сообщение
Muzafir 19 Опубликовано 20 Сентября 2020 16.09.2020 в 19:17, Houdini_one сказал: файлы gulag_xxx.scripts регистрируются в xr_gulag.scripts в level_gulags Зарегистрировал - получил вылет с руганью на g.script. Посмотрел повнимательней, увидел ниже ссылку на gulag.tasks. Добавил туда инклюд - получил вылет без лога. Знаю, что безлоговые вылеты обычно из-за ошибок в путях нпс или диалогах. Диалоги отпадают - я их не трогал. Пути проверил - там всего 3 человека для теста. В связи с чем вопрос: может я еще где-то что-то не прописал? Поделиться этим сообщением Ссылка на сообщение
Muzafir 19 Опубликовано 21 Сентября 2020 @Houdini_one, а как показать? Я с радостью - очень хочется понять проблему. Файл приложить или еще как-то Поделиться этим сообщением Ссылка на сообщение
Muzafir 19 Опубликовано 22 Сентября 2020 Попробовал снова переделать гулаг. Поставил смарт, в нем бандоса, указал в кастом дата принадлежность к этому СТ. Пока нет логики в файлах gulag.ltx и gulag.script, игра грузится нормально, нпс гуляет поблизости. Как только добавляю логику, спустя сек 15-20 происходит вылет: 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: C stack overflow Прочитал, что переполнение вызывается какой-либо функцией, которая вызывается бесконечное кол-во раз. Получается винить можно только мой gulag.script. Гляньте, кто разбирается, что там может так падлить: Скрытый текст local t = {} function load_job(sj, gname, type, squad, groups) --' Simeiz gsk lager if type == "simeiz_gsk_lager" then t = { section = "logic@simeiz_gsk_lager_kamp", idle = 0, prior = 6, state = {0,1}, in_rest = "", out_rest = "" } table.insert(sj, t) end end function load_states(gname, type) if type == "simeiz_gsk_lager" then return function(gulag) local actor = db.actor if not actor then return gulag.state end if level.get_time_hours() >= 5 and level.get_time_hours() <= 22 then return 0 -- день else return 1 -- ночь end end end end -------------------------------------------------------------------------- -- Dynamic ltx -------------------------------------------------------------------------- function load_ltx(gname, type) return nil end function checkStalker(npc_community, gulag_type, npc_rank, se_obj) if gulag_type == "simeiz_gsk_lager" then return npc_community == "bandit" end return false end Кажется нашел: лишний end в функции function load_states. Так? Поделиться этим сообщением Ссылка на сообщение
Muzafir 19 Опубликовано 19 Ноября 2020 Скажите, а может быть у НПС несколько секций meet? По типу для walker1 - meet1, walker2 - meet2. Пару дней уже мучаюсь с этим конструктором. Не хочет НПС отрабатывать свою логику и все тут... Поделиться этим сообщением Ссылка на сообщение
Muzafir 19 Опубликовано 20 Ноября 2020 @Купер, ты абсолютно правильно меня понял, хотя ничего не и не было понятно . Об этом я спрашивал. По этой же схеме пытаюсь заставить НПС работать, но он отказывается. Поэтому и закралось сомнение. Спасибо, значит дело в другом. 1 Поделиться этим сообщением Ссылка на сообщение
Muzafir 19 Опубликовано 22 Ноября 2020 Привет всем. Как можно удалить у актора все из рук и инвентаря, кроме бинокля, болта, ПДА и фонарика? Проще говоря, ограбить. Пробовал так: Скрытый текст function clear_inventory() local cnt = db.actor:object_count() for i=0, cnt-1 do local item = db.actor:object(i) local sobj = alife():object(item:id()) if sobj and sobj ~= db.actor:item_in_slot(4) or sobj ~= db.actor:item_in_slot(5) or sobj ~= db.actor:item_in_slot(7) or sobj ~= db.actor:item_in_slot(9) then alife():release(sobj,true) end end end но что-то не выходит. Просьба сильно не бить: со скриптами не особо дружу. (На всякий пожарный - функцию засунул в xr_effects.script и вызывал из спейс-рестриктора) Поделиться этим сообщением Ссылка на сообщение
Muzafir 19 Опубликовано 24 Ноября 2020 @AndreySol, спасибо еще раз. Все заработало в таком виде: Скрытый текст function clear_inventory(actor,npc) db.actor:inventory_for_each(function(item) local section = item:section() if section and section ~= "wpn_binoc" or section ~= "device_torch" or section ~= "wpn_bolt" or section ~= "device_pda" then alife():release(alife():object(item:id()), true) end end) end Меченый остается в одном свитере, но с биноклем, фонарем, болтом и ПДА, если они были. Может, кому-нибудь пригодится. 1 1 Поделиться этим сообщением Ссылка на сообщение
Muzafir 19 Опубликовано 25 Ноября 2020 @Купер, согласен с претензиями к эстетичности, но с моим уровнем скриптования я рад тому, что просто заработало, как я хотел Поделиться этим сообщением Ссылка на сообщение
Muzafir 19 Опубликовано 29 Ноября 2020 Привет всем. Хочу сделать, чтобы актор не смог свистнуть определенную вещь. Добавил в bind_stalker.script в функцию actor_binder:on_item_take (obj) такой код: if obj:section() == "exo_outfit" and not has_alife_info("инфопорция") then db.actor:give_info_portion("инфопорция") end Работает, но: мне нужно сделать, чтобы инфопорция выдавалась только при попадании в инвентарь определенного экзоскелета (того что нельзя красть), а не вообще любого. Иначе, получится, что добыл где-то игрок экзоскелет на другой локации, а на него здесь обиделись . Пробовал в скрипте и в ЛЕ просто переименовать этот exo_outfit - тогда не работает. Может, возможно как-то получить предмет не по section, а по story id, например, или еще как-то, чтобы игра понимала, что имеется ввиду конкретный экземпляр экзоскелета? Поделиться этим сообщением Ссылка на сообщение
Muzafir 19 Опубликовано 29 Ноября 2020 (изменено) @naxac, Спасибо, думаю f obj:story_id() - оптимальный вариант а if obj:name() - еще лучше, Работает по названию, которое дал в ЛЕ. И не нужно лишних story id @ru trash_, Профили НПС описаны в файлах character_desc_имя локации.xml. Чтобы лутаемый костюм соответствовал профилю, нужно его в разделе supplies указать, наверное. Там же и вооружить можешь НПС по своему усмотрению. Изменено 29 Ноября 2020 пользователем Muzafir Поделиться этим сообщением Ссылка на сообщение
Muzafir 19 Опубликовано 2 Декабря 2020 Всем привет! Есть такая функция: Скрытый текст function give_treasure() treasure_manager.get_treasure_manager():give_treasure("название тайника") end Прекрасно работает при вызове из диалога. А как можно прикрутить ее к трупу, чтобы получать тайник при обыске? Секция on_use в логике, по видимому, не работает с трупами. Known info - просто выдает инфопорцию, а функцию же надо еще как-то вызвать. Поделиться этим сообщением Ссылка на сообщение
Muzafir 19 Опубликовано 3 Декабря 2020 Как то еще, кроме того чтобы засунуть проверку в коллбэк правильного скрипта? P.S. извиняюсь, если не точно сформулировал: как-то еще, кроме того что уже подсказал Zander_driver? Спрашиваю, т.к. это срабатывает с некоторой задержкой, иногда когда второй раз нажимаю "обыскать". Боюсь, что первый раз может не сработать, и игрок просто пройдет мимо. Поделиться этим сообщением Ссылка на сообщение