Overf1rst 1 503 Опубликовано 1 июля, 2020 Тема посвящена моддингу на платформе Зов Припяти. Правила темы: Здесь задают вопросы и получают на них ответы. Прежде чем задать вопрос, воспользуйтесь поиском, ответ на него, вероятно, уже есть. Если у вас произошёл вылет, проверьте лог и поищите информацию об ошибке в справочнике. Также будет полезно посмотреть справочник ошибок. Если у Вас вылетает какой-то мод, то следует написать в тему этого мода. Грамотно оформляйте свой пост, чётко доносите суть своего вопроса (ответа). Благодарность выражаем в личке или же ставим реакцию. Посты с благодарностями в теме будут удаляться. 19 9 1 1 2 6 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
ian98 302 Опубликовано 8 августа, 2021 Policai не скриптер, не знаю) Думаю, что первая лучше подходит для диалогов, а вторая нет, хех. Со спейс рестрикторами, если это они, вообще почти не работал. Не подскажу. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Nowaki 0 Опубликовано 8 августа, 2021 Я пытался объединить Gunslinger и Ушедшая Душа, но обнаружил некоторую проблему. Например, быстрый нож будет противоречить обновлению штыка винтовки, а оснащение пистолета или другого оружия, которое не поддерживает штык, не будет воспроизводить анимацию ножа, это серьезная проблема. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Сергей Шубин 21 Опубликовано 8 августа, 2021 Добрый вечер. Возник вопрос. Есть объект - inventory_box. На боксе стоит метка. Эту метку надо удалить. Функция для удаления должна вызываться из логики этого самого бокса. Как её правильно составить? if level.map_has_object_spot(box:id(), "treasure") ~= 0 then level.map_remove_object_spot(box:id(), "treasure") end Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Neptun 885 Опубликовано 8 августа, 2021 5 часов назад, Сергей Шубин сказал: Эту метку надо удалить. Пардон, а как вы её ставили? Я делаю так: local box_1 = get_story_object_id("ид_объекта") level.map_add_object_spot_ser(box_1, "иконка_метки", "описание") Потом удалить метку этой функцией: level.map_remove_object_spot(box_1, "иконка_метки") Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
AziatkaVictor 3 936 Опубликовано 8 августа, 2021 5 часов назад, Сергей Шубин сказал: if level.map_has_object_spot(box:id(), "treasure") ~= 0 then Не стоит так записывать, не разобравшись. Если ты пытаешь проверить наличие метки, то НИКОГДА не пиши так. В программирование есть разница между nil и 0. А разница в том, что 0 это значение типа int, а nil это отсутствие значения. Вообще, советую писать вот так, точно не ошибешься: if level.map_has_object_spot(box:id(), "treasure") then --действия end 1 Как оформить тему Правила форума Вопросы по сайту Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Сергей Шубин 21 Опубликовано 9 августа, 2021 7 часов назад, AziatkaVictor сказал: Не стоит так записывать, не разобравшись Я сделал рюкзаки-тайники с хабаром. Спавнятся по скрипту в ходе игры. Как награда за квесты и.д. С метками или без меток. Встала задача - при первою юзании рюкзака метку удалить. Есть функция. function on_use_box(box) local box_name=box:section() if (box_name=="deserve_rukzak" or box_name=="reward_rukzak" or box_name=="treasure_rukzak") then local name = box:name() if not has_alife_info(name) then give_info(name) xr_statistic.inc_founded_secrets_counter() news_manager.send_treasure(1) end if level.map_has_object_spot(box:id(), "treasure") ~= 0 then level.map_remove_object_spot(box:id(), "treasure") end if level.map_has_object_spot(box:id(), "treasure_npc") ~= 0 then level.map_remove_object_spot(box:id(), "treasure_npc") end end end Вызывается из generic_physics_binder:use_callback(obj, who). И все работает отлично. Сделал рюкзаки-бомбы. Тоже с метками. Но тут задача другая. Метку надо удалять непосредственно перед подрывом. И удалить её должен рюкзак из своей логики. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Policai 1 333 Опубликовано 9 августа, 2021 Народ! Сори за нубский вопрос. В начале диалога две строки <precondition>scripts_локация.функция</precondition> <has_info>инфопоршень</has_info> Поясните плиз, диалог начнётся при соблюдении обоих условий? Или любого из этих условий? И второй вопрос, в чём ошибки функций: Прекондишен, роверка наличия у актора 5 КПК Цитата function bar_balamut_kpk_items(first_speaker, second_speaker) return (db.actor:object("device_pda_quest_bar") ~= nil and db.actor:object("device_pda_quest_bar") ~= nil and db.actor:object("device_pda_quest_bar") ~= nil and db.actor:object("device_pda_quest_bar") ~= nil and db.actor:object("device_pda_quest_bar") ~= nil ) end Диалог всё равно начинается, независимо от того, есть ли у актора 5 кпк или нету... И функция передачи 3 КПК Цитата function bar_relocate_items_balamut( first_speaker, second_speaker ) dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "device_pda_quest_bar" ) dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "device_pda_quest_bar" ) dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "device_pda_quest_bar" ) end Функция срабатывает, в диалоге 3 раза высвечивается потерян предмет, но из инвентаря изымается только 1 КПК... Группа мода в VK Мод делался и тестировался на железе i5-11400, 32Гб ОЗУ, Radeon RX580 Разрешение 2560 х 1440. ВСЕ на максималке Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Neptun 885 Опубликовано 9 августа, 2021 1 час назад, Policai сказал: диалог начнётся при соблюдении обоих условий? Должны быть выполнены все условия. 1 час назад, Policai сказал: есть ли у актора 5 кпк или нету function bar_balamut_kpk_items(first_speaker, second_speaker) local item_sections = { [1] = "device_pda_quest_bar" } local needed = 5 local count = 0 local item_section local function calc(temp, item) if item:section() == item_section then count = count + 1 end end for k,v in pairs(item_sections) do item_section = v get_story_object("actor"):iterate_inventory(calc, actor) -- printf("?bar_balamut_kpk_items? : section [%s] count [%s]", tostring(v), tostring(count)) end return count >= needed end 1 час назад, Policai сказал: в диалоге 3 раза высвечивается потерян предмет function bar_relocate_items_balamut(first_speaker, second_speaker) dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "device_pda_quest_bar", 3) end 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Policai 1 333 Опубликовано 9 августа, 2021 (изменено) 35 минут назад, Neptun сказал: function bar_balamut_kpk_items(first_speaker, second_speaker) local item_sections = { [1] = "device_pda_quest_bar" } local needed = 5 local count = 0 local item_section local function calc(temp, item) if item:section() == item_section then count = count + 1 end end for k,v in pairs(item_sections) do item_section = v get_story_object("actor"):iterate_inventory(calc, actor) -- printf("?bar_balamut_kpk_items? : section [%s] count [%s]", tostring(v), tostring(count)) end return count >= needed end А почему такая сложная функция для прекондишена? Я просто пример привёл с 5 кпк. Та функция что я привёл, работает с разными предметами в количестве по 1 штуки. а вот как там прописать чтоб учитывало количество я не соображу.((( 35 минут назад, Neptun сказал: Должны быть выполнены все условия. Значит всё таки у меня неверная функция..((( 38 минут назад, Neptun сказал: function bar_relocate_items_balamut(first_speaker, second_speaker) dialogs.relocate_item_section_from_actor(first_speaker, second_speaker, "device_pda_quest_bar", 3) end Спасибо, работает как нужно. Изменено 9 августа, 2021 пользователем Policai Группа мода в VK Мод делался и тестировался на железе i5-11400, 32Гб ОЗУ, Radeon RX580 Разрешение 2560 х 1440. ВСЕ на максималке Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Doctor_Oz 29 Опубликовано 9 августа, 2021 Здравствуйте, не знаю можно ли тут такое писать, но все же. Мне нужна помощь, а именно снятие координат инвентаря. Просто я добрался до OpenXRay и я умудрился сделать 8 слотов артефактов и ячейки ножа, бинокля. Кто может помочь? Просто я если честно не разбираюсь в снятии координат. Максимум координаты предмета, не более. Помогите пожалуйста! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Neptun 885 Опубликовано 9 августа, 2021 21 минуту назад, Policai сказал: А почему такая сложная функция для прекондишена? Так делали пысы. Твоя функция не работает, потому что нет именно подсчёта одинаковых предметов. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
stalker032 5 Опубликовано 10 августа, 2021 (изменено) Здравствуйте. У меня есть чистый нпс(к нему написана логика, чтобы он стоял в одной позиции.), делал его через сдк. С персом всё нормально. Вопрос: как его заспавнить во время диалога, после определенного инфопоршня? Это надо вскрывать all.spawn, или через сдк или всё же можно прописать ему это в логику? Или со скриптами работать? Изменено 10 августа, 2021 пользователем stalker032 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Neptun 885 Опубликовано 10 августа, 2021 22 минуты назад, stalker032 сказал: Это надо вскрывать all.spawn Для этого НПС создаётся сквад, и он спавнится в любое время. Урок ТЫК Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
stalker032 5 Опубликовано 10 августа, 2021 (изменено) 4 часа назад, Neptun сказал: Для этого НПС создаётся сквад, и он спавнится в любое время. Урок ТЫК Спасибо. Изменено 10 августа, 2021 пользователем stalker032 Проблему уладил. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Doctor_Oz 29 Опубликовано 10 августа, 2021 Здрасте. А возможно ли изменение инвентаря так, чтобы оружие было в горизонтальном положении? Нужно ли править движок или как? Спрашиваю просто перед тем как напортачить. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Neptun 885 Опубликовано 11 августа, 2021 Добро. Надо, чтобы НПС во время смерти произнёс определённый звук, делал так же, как и пысы для отряда в путепроводе, но прикол в том, что НПС я убиваю через функцию =kill_npc, и выходит, что игра такой способ убийства не засчитывает, и они умирают молча. Как можно добиться желаемого при том же условии? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Policai 1 333 Опубликовано 11 августа, 2021 (изменено) 2 часа назад, Neptun сказал: Добро. Надо, чтобы НПС во время смерти произнёс определённый звук, делал так же, как и пысы для отряда в путепроводе, но прикол в том, что НПС я убиваю через функцию =kill_npc, и выходит, что игра такой способ убийства не засчитывает, и они умирают молча. Как можно добиться желаемого при том же условии? Миш! А нельзя в логике после =kill_npc добавить воспроизведение нужного звука =play_sound_to_actor(звук относительно папки sounds ) ? Изменено 11 августа, 2021 пользователем Policai Группа мода в VK Мод делался и тестировался на железе i5-11400, 32Гб ОЗУ, Radeon RX580 Разрешение 2560 х 1440. ВСЕ на максималке Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
svi_042 285 Опубликовано 11 августа, 2021 Доброго дня. Возникла необходимость отправить сообщение через некоторое время после окончания диалога. Вопрос следующий - где можно посмотреть вменяемый скрипт таймера, который бы не обнулялся при сейвлоаде/переходе на другую локацию? Сам таймер вызывается как action в диалоге. Делал по этому уроку, но оба варианта сбиваются как раз. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Neptun 885 Опубликовано 11 августа, 2021 Только что, svi_042 сказал: который бы не обнулялся при сейвлоаде Только через правку движка. Можно попробовать через СДК поставить рестриктор и поставить галочку, чтобы он работал для всех локаций, и через его логику уже пускать стандартный таймер, который как раз работает через движок. 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
svi_042 285 Опубликовано 11 августа, 2021 14 минут назад, Neptun сказал: галочку, чтобы он работал для всех локаций Это которая used AI locations? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Overf1rst 1 503 Опубликовано 11 августа, 2021 4 часа назад, Neptun сказал: Можно попробовать через СДК поставить рестриктор и поставить галочку, чтобы он работал для всех локаций, и через его логику уже пускать стандартный таймер, который как раз работает через движок. Не, на другой локации рестриктор будет оффлайн. Пробовал когда-то. ? Да и нет у рестриктора никаких особых галочек. Не знаю, делал ли кто-то для ЗП функционал сохраняющихся таймеров, но можешь подсмотреть в AMK моде, там есть такое дело. Правки движка-то зачем? 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mass 95 Опубликовано 11 августа, 2021 (изменено) 7 часов назад, Policai сказал: play_sound_to_actor Вроде как играть в голове актора это, а ему нужно от нпс!? В чём проблема использовать on_death из логики сквада или нпс и проиграть нужный звук от точки нпс?. От самого нпс не стОит т.к судя по примерам в ЗП есть аборт в xr_effects, на случай того, что нпс озвучивает фразу. Но надо смотреть сорцы, вдруг я ошибаюсь. Изменено 11 августа, 2021 пользователем Mass Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Policai 1 333 Опубликовано 11 августа, 2021 2 часа назад, Mass сказал: Вроде как играть в голове актора это, Я смотрю на это манешко по другому..)))) Слушать это будет игрок. НПС по барабану что там и кто орёт..)))), так что какая разница откуда звучит звук? он по любому в динамиках..))) Ну или в наушниках... Ну и на крайняк. я просто предложил вариант, наверно есть и другая функция. звучащая "формально" не в голове актора..))) Группа мода в VK Мод делался и тестировался на железе i5-11400, 32Гб ОЗУ, Radeon RX580 Разрешение 2560 х 1440. ВСЕ на максималке Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
stalker032 5 Опубликовано 11 августа, 2021 создал рестрикторы и логики для персов, но вылет при старте новой игры: [error]Expression : !m_error_code [error]Function : raii_guard::~raii_guard [error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp [error]Line : 748 [error]Description : e:\mods\zp\stalker 2\gamedata\scripts\utils.script:469: bad argument #1 to 'gsub' (string expected, got nil) как вылечить? И в чём собственно проблема? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Сергей Шубин 21 Опубликовано 11 августа, 2021 3 часа назад, stalker032 сказал: как вылечить? И в чём собственно проблема? Где то ошибка в логике. Отключите логику у свежедобавленных рестрикторов. Уберите спавн персов. Затем подключайте их по одному. И найдете ошибочную логику. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты