CiberZold 142 Опубликовано 1 Августа Поделиться Опубликовано 1 Августа @Labadal я же говорю, ты сам может накосячил в тексте, я когда впервые разбирал спавн ACDC, я правя текстовые файлы спавна, то ли пропустил номер секции спавна , они шли не подряд, сборщиком собрал спавн ,не было никаких ошибок при сборке - всё собралось, но игра вылетала при загрузке спавна, потом всё перепроверил и пришлось вручную проверять чтоб не было пропуском номеров секций, ведь это же не SDK ,который тебе сам всё корректно проставит, при компиляции, а сторонний сборщик, который переводит бинарные файлы в текстовые и обратно, тут нельзя самому юзеру нарушать структуру исходников. Ссылка на комментарий
CiberZold 142 Опубликовано 1 Августа Поделиться Опубликовано 1 Августа 2 часа назад, Labadal сказал: В каком тексте я накосячил? Причем тут вообще ACDC?? при том что это был пример, проблема у тебя из-за твоих косяков, а мы по минимуму инфы должны гадать что ты там косячишь Ссылка на комментарий
abramcumner 1 151 Опубликовано 1 Августа Поделиться Опубликовано 1 Августа @Labadal попробуй запустить на OGSR-Engine. Так у тебя должен появиться нормальный лог. Без него так и будешь дальше тыкаться как слепой котенок. 1 Ссылка на комментарий
Капрал Хикс 522 Опубликовано 1 Августа Поделиться Опубликовано 1 Августа Такой вопрос... Так как отследить взятое однотипное задание из скрипта таскменеджера я так и не сумел, есть ли какой-то костыльный метод отслеживания наличия у ГГ артикла с описанием задания? Ведь у каждого квеста типа принести артефакт например есть описание... Ссылка на комментарий
Norman Eisenherz 309 Опубликовано 1 Августа Поделиться Опубликовано 1 Августа 1. Прошлый ответ не подошел или был пропущен? https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/616/#comment-1480857 2. Статьи выдаются только через инфо-поршни – их и проверять. 2.1. Статья не является обязательной частью описания квеста. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
naxac 2 445 Опубликовано 2 Августа Поделиться Опубликовано 2 Августа 31.07.2024 в 13:39, Labadal сказал: Запускаю игру - опять получаю безлоговый вылет Была у меня когда-то давно такая история при сборке спавна с помощью xrAI. Проблема, насколько я понял тогда, в самом xrAI. Есть, вроде как, какая-то правленая версия, но я тогда её так и не нашёл - перешел на АСДС. Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Labadal 68 Опубликовано 2 Августа Поделиться Опубликовано 2 Августа @naxac всё оказалось намного проще, нужно было просто скомпилировать локу с помощью xrLC а потом через xrAI графы и спавн собирать)) Такой еще вопросик: ловлю безлоговый вылет при разговоре с НПС, зачастую в момент когда отправлю неписю предпоследнюю фразу диалога, за которой он должен ответить последней. Первым делом тоже подумал, что отсутствует функция, которая выдаётся после этой фразы, но нет, вылетает даже в пустых от различных функций диалоги. Есть моменты, когда вылатает при попытке поговорить. Есть моменты, когда нпс тупо стоит на месте спавна и с ним не поговорить, однако вдупляется после сейвлоада. в логфайле последней записью почти всегда это: *INFO*:_npc='single_player'_id='ui_talk_hide' в некоторых случаях пишет это: *INFO*:_npc='single_player'_id='ид_нпс_с_которым_разговор' God save Hatsune Miku! Ссылка на комментарий
Купер 2 848 Опубликовано 2 Августа Поделиться Опубликовано 2 Августа 2 часа назад, Labadal сказал: Есть моменты, когда нпс тупо стоит на месте спавна и с ним не поговорить, однако вдупляется после сейвлоада Снова проблемы с повисающей логикой. Разбираться с причиной, а не последствиями. 1 Ссылка на комментарий
Labadal 68 Опубликовано 2 Августа Поделиться Опубликовано 2 Августа @Купер оказалось, что это не моя проблема. в оригинале этот же нпс так же "подвисает" (в деревне новичков). Понимаю, что нужно разбираться с причиной, однако её бы найти сначала. God save Hatsune Miku! Ссылка на комментарий
Капрал Хикс 522 Опубликовано 2 Августа Поделиться Опубликовано 2 Августа @Norman Eisenherz , я к стыду своему так и не понял, как сделать привязку согласно совету. Не хватает знаний. Ссылка на комментарий
Labadal 68 Опубликовано 2 Августа Поделиться Опубликовано 2 Августа (изменено) @Капрал Хикс Вообще не понятно зачем это нужно? Но даже если и так, в самом деле, задания просто так не выдаются, - поршнем зачастую. Вот и отслеживай этот поршень, если он у тебя есть, и выдавай другой, например. Можешь что-то типа этого: local function name(actor, info_pairs) for _, pair in ipairs(info_pairs) do if actor:has_info(pair.check) then actor:give_info_portion(pair.give) break end end end local info_pairs = { {check = "поршень, по которому выдаётся первый квест", give = "инфопоршень, который выдаётся, если он есть"}, {check = "поршень, по которому выдаётся второй квест", give = "инфопоршень, который выдаётся, если он есть"}, {check = "поршень, по которому выдаётся третий квест", give = "инфопоршень, который выдаётся, если он есть"} } check_and_give_info(db.actor, info_pairs) это лишь примерная конструкция, я бы даже сказал псевдокод. Ну, или стандартным: if db.actor:has_info("поршень, по которому выдаётся первый квест") then db.actor:give_info_portion("инфопоршень, который выдаётся, если он есть") elseif db.actor:has_info("поршень, по которому выдаётся второй квест") then db.actor:give_info_portion("инфопоршень, который выдаётся, если он есть") elseif db.actor:has_info("поршень, по которому выдаётся третий квест") then db.actor:give_info_portion("инфопоршень, который выдаётся, если он есть") @Капрал Хикс кстати, есть ещё такой вариант, он отлавливает состояние квеста, попробуй его: local task_status = db.actor:get_task_state("тут пишешь id квеста", 0) -- id квеста из <game_task id="id квеста"> if task_status == 0 then -- Действия, если задание провалено elseif task_status == 2 then -- Действия, если задание выполнено elseif task_status == 1 then -- Действия, если задание активно elseif task_status == -1 then -- Действия, если задания нет ни в проваленных, ни в выполненных, ни в активных end Изменено 2 Августа пользователем Labadal 1 God save Hatsune Miku! Ссылка на комментарий
Капрал Хикс 522 Опубликовано 2 Августа Поделиться Опубликовано 2 Августа (изменено) 2 часа назад, Labadal сказал: кстати, есть ещё такой вариант, он отлавливает состояние квеста, попробуй его: О, пожалуй его и буду пробовать. Суть такой странной пожелалки вот в чём: я создал тип квеста на основе стандартного однотипного, где вместо поиска предмета задание засчитывается при выдаче определённого инфопоршня. Т.е. в таргете стоит не хвост собаки получить например, а имя инфопоршня. Нужный инфопоршень конкретного 1 квеста на пробу пера выдаётся при наличии 4-х, которые выдаются при заходе ГГ в 4 спейс-рестриктора. Так вот, мне нужно в логике спейс-рестриктора добавить условие-заглушку, чтобы инфопоршень выдавался только при наличии активного квеста. Иначе, если игрок раньше времени придёт туда, квест как нужно работать не будет. Разумеется, всё это можно было бы сделать гораздо проще через отдельно созданный квест, где бы в диалоге на его взятие выдавался бы поршень, который можно уже отследить, но захотелось мне вот ещё модифицировать стандартный task_manager, после того как я добавил туда возможность выдачи квестов на поиск предметов на любом классе. Изменено 2 Августа пользователем Капрал Хикс Ссылка на комментарий
Norman Eisenherz 309 Опубликовано 2 Августа Поделиться Опубликовано 2 Августа Для привязки достаточно обернуть указанные действия в функцию и вызывать ее по необходимости – можно из логики того же рестриктора: on_actor_inside = … %=info_check% [xr_effects.script] function info_check() local tm = task_manager.get_random_task() local task = tm.task_info[type_parent] if task.status = "selected" then … end Требуется только подставить заголовок нужной задачи (artefact_wolf какой-нибудь) и конечное действие. 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Капрал Хикс 522 Опубликовано 2 Августа Поделиться Опубликовано 2 Августа Будем делать, за советы спасибо! Ещё, други, в Зове Припяти можно при клике на найденные КПК в инвентаре слушать звуковое сообщение, которое выдаётся при его нахождении. Кто-нибудь в ТЧ такое перетаскивал? Ссылка на комментарий
ted.80 251 Опубликовано 2 Августа Поделиться Опубликовано 2 Августа 2 часа назад, Капрал Хикс сказал: в Зове Припяти можно при клике на найденные КПК в инвентаре слушать звуковое сообщение, ЕМНИП - сообщение воспроизводится при поднятии КПК, а при наведении курсора - во всплывающем окошке появляется текст, подобное в ТЧ было в нычке стрелка при поднятии флешки, вот тут память меня подводит или в AMK нашем и родном или в НарСоль, ну или маразм меня подводит Личный АРХИВ по S.T.A.L.K.E.R Ссылка на комментарий
Labadal 68 Опубликовано 2 Августа Поделиться Опубликовано 2 Августа (изменено) @ted.80 @Капрал Хикс В любом случае, можешь попробовать данную функцию: в своём скриптовом файле, например: sms_pda.script пишешь: function use_pda(item) local sect = item:section() if sect == "тут имя секции твоего pda" then -- тут выдаёшь сам звук, например: local snd_obj = xr_sound.get_safe_sound_object([[affects\tinnitus3a]]) snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0) --не забываешь выдать предмет обратно, т.к. при использовании он пропадает alife():create("тут имя секции твоего pda", db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id()) end затем, в bind_stalker.script пишешь: в функции function actor_binder:reinit(): self.object:set_callback(callback.use_object, self.on_use_object, self) в функции: function actor_binder:net_destroy() p/s не знаю, насколько действительно это нужно, у меня работает и без прописывании калбека в этой функции: self.object:set_callback(callback.use_object, nil) ну а дальше, где-то в bind.stalker создаёшь функцию: function actor_binder:on_use_object(obj, who) sms_pda.use_pda(obj) end после этого при использовании твоего пда будет воспроизводиться звук, который ты укажешь (ну или любое действие, которое ты хочешь, чтобы делалось при использовании определенного предмета) Изменено 2 Августа пользователем Labadal 1 1 God save Hatsune Miku! Ссылка на комментарий
ted.80 251 Опубликовано 2 Августа Поделиться Опубликовано 2 Августа 26 минут назад, Labadal сказал: В любом случае, можешь попробовать данную функцию: Тыж мой золотой, гайд по воиспроизведению звука при использовании предмета написан ОООчень давно, но за старание плюсик но ты забываешь один мааааленький нюанс ни в ТЧ ни в ЗП кпк или пда кому как, не является юзабельным предметом, ну нет у него функционала "использовать", ты можешь только выкинуть его или продать - ВСЁ! чтоб его юзать нужно делать отдельный предмет на классе аптечки, бинта или антирада, да хоть колбасы наконец, присваивать ему иконку кпк вот потом его можно юзать. 43 минуты назад, Labadal сказал: --не забываешь выдать предмет обратно, т.к. при использовании он пропадает а чтоб с этим не париться: [remkit]:device_pda description = "Ремнабор" inv_name = "Ремнабор" inv_name_short = "Ремнабор" cost = 5000 class = II_ANTIR eat_health = 0 eat_satiety = 0 eat_power = 0 eat_radiation = 0 wounds_heal_perc = 0 eat_portions_num = -1 последняя строчка eat_portions_num = -1 обозначает что предмет можно есть бесконечно он не пропадает из инвентаря и спавнить заново не нужно - пользуйся 1 1 Личный АРХИВ по S.T.A.L.K.E.R Ссылка на комментарий
Labadal 68 Опубликовано 2 Августа Поделиться Опубликовано 2 Августа @ted.80 точно-точно, благодарю за уточнение) с помощью xrLuaFix от RvP как-то можно получить нормальный лог, причину? не понимаю в чем проблема, вылетает в диалогах, зачастую при последней фразе ГГ. (она может быть как и последней в самом диалоге, так и предпоследней, но для ГГ она точно последняя). При: function printf(fmt,...) log(string.format(fmt,...)) local con = get_console() con:execute(string.gsub(string.format(fmt,...), " ", "_")) con:execute("flush") end в лог файле последняя запись зачастую Unknown command: *INFO*:_npc='single_player'_id='ui_talk_hide' и всё, больше никаких зацепок. Бывает, что вылетает вообще при попытке поговорить, но это единичные случаи. понять бы в чем причина. God save Hatsune Miku! Ссылка на комментарий
Labadal 68 Опубликовано 3 Августа Поделиться Опубликовано 3 Августа (изменено) Мне тут посоветовали для поиска причины воспользоваться движком ОГСР, во время диалога произошёл вылет, ругался на следующую функцию: --[[ -- Диалоги помощи раненным function init_help_wounded_medkit_dialog(dlg) local phr = dlg:AddPhrase("dm_general_help_medkit",0,-1,-10000) local phrase_script = phr:GetPhraseScript() phrase_script:AddAction("dialogs.transfer_medkit") local k,v = 0,0 for k,v in pairs(phrase.help_thanks) do phr = dlg:AddPhrase(v.name,v.phr_id,0,-10000) if phr then phrase_script = phr:GetPhraseScript() phrase_script:AddPrecondition("dialog_manager.precondition_help_thanks") end end end --]] я её заккоментил, проблема пропала. Однако пропала только на огср, при возвращении на свой движок, опять безлоговый вылет. Есть идеи? разные вылеты (при препоследней фразе диалога, при последней фразе диалога, просто при попытке поговорить), ругается на разные функции из файла dialog_manager, но ругается на AddPhrase. local phr = dlg:AddPhrase("",0,-1,-10000) local phr = dlg:AddPhrase("dm_general_help_medkit",0,-1,-10000) и тд. что блин делать? Изменено 3 Августа пользователем Labadal God save Hatsune Miku! Ссылка на комментарий
mole venomous 3 394 Опубликовано 3 Августа Поделиться Опубликовано 3 Августа 1 час назад, Labadal сказал: ругается на разные функции из файла dialog_manager Откуда этот файл? Движок и скрипт шли одним комплектом? Здесь могла быть ваша реклама. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти