Labadal 59 Опубликовано 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 59 Опубликовано 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 59 Опубликовано 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 275 Опубликовано 3 Августа Поделиться Опубликовано 3 Августа 1 час назад, Labadal сказал: ругается на разные функции из файла dialog_manager Откуда этот файл? Движок и скрипт шли одним комплектом? Здесь могла быть ваша реклама. Ссылка на комментарий
Купер 2 733 Опубликовано 3 Августа Поделиться Опубликовано 3 Августа Дайте угадаю, так сказать, методом телепатического стука! А прямиком из 1.0004 патча.О, сколько нам открытий чудных... --* патч 5+ function gen_phrase_id_str() intro_id = intro_id + 1 return tostring(intro_id) end --* патч 4- function get_id() intro_id = intro_id + 1 return intro_id end - Исправлена ошибка в диалогах. Эта ошибка приводила к тому, что диалоги с большой степенью вложенности зацикливались. Т.е., как минимум, GSC в 5-ом патче поменяли тип используемой переменной в dialog_manager.script и далее по коду. --* 6-ка local phr = dlg:AddPhrase("","0","",-10000) phr = dlg:AddPhrase("","1","0",-10000) --* 4-ка local phr = dlg:AddPhrase("",0,-1,-10000) phr = dlg:AddPhrase("",1,0,-10000) --* 6-ка local phr = dlg:AddPhrase("dm_general_help_medkit","0","",-10000) --* 4-ка local phr = dlg:AddPhrase("dm_general_help_medkit",0,-1,-10000) И аналогично во всех остальных местах кода, где это используется. Смотреть что, куда и зачем секретное пытаемся соорудить и приспособить. В Солянке 2016+, например, это исправлено и унифицировано с т.з. независимости от патча. 1 2 2 1 Ссылка на комментарий
Labadal 59 Опубликовано 5 Августа Поделиться Опубликовано 5 Августа @Купер 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: ...\level_editor\gamedata\scripts\dialog_manager.script:393: attempt to compare number with nil Что тут, тогда? при сейвлоаде летит. God save Hatsune Miku! Ссылка на комментарий
mole venomous 3 275 Опубликовано 5 Августа Поделиться Опубликовано 5 Августа Здесь из FAQ на ресурсе: 1 Здесь могла быть ваша реклама. Ссылка на комментарий
naxac 2 414 Опубликовано 5 Августа Поделиться Опубликовано 5 Августа (изменено) @Labadal , там весь скрипт переделывать надо, в том числе и в тех местах, где создаются уникальные id для фраз. Возьми просто родной скрипт от 6-го патча. Изменено 5 Августа пользователем naxac 2 2 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Labadal 59 Опубликовано 6 Августа Поделиться Опубликовано 6 Августа @naxac В том и дело, что взял. 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: ...\level_editor\gamedata\scripts\dialog_manager.script:393: attempt to compare number with nil этот получаю при загрузке сохранения (НИ грузит норм). Переменная ver в функции function load(npc, reader, ver) почему-то уходит в nil. и при сравнении: if ver >= 7 then flag = reader:r_stringZ() else flag = tostring(reader:r_s16()) end даёт такой вылет. Я, конечно, сделал ver = 8, чтобы избавиться от вылета, однако это ведь не решение. God save Hatsune Miku! Ссылка на комментарий
Kirgudu 1 172 Опубликовано 6 Августа Поделиться Опубликовано 6 Августа 1 час назад, Labadal сказал: Переменная ver в функции function load(npc, reader, ver) почему-то уходит в nil См. строку 342 в xr_motivator.script (патч 1.0006). Мало заменить функцию из одного патча функцией из другого, надо ещё понимать, что ты делаешь. Если число аргументов увеличилось, откуда взяться значению добавленного аргумента? Только из места вызова самой функции, иначе будет пресловутый nil. 1 1 Инструмент Ссылка на комментарий
naxac 2 414 Опубликовано 6 Августа Поделиться Опубликовано 6 Августа 1 час назад, Labadal сказал: это ведь не решение У тебя стоит какой-то мод, предназначенный для 4 патча, а движок - 6 патча. Отсюда и все проблемы с зависанием нпс, и вот эта трабла с диалог_менеджером тоже. 1 1 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Labadal 59 Опубликовано 6 Августа Поделиться Опубликовано 6 Августа @naxac если говорить в целом, игра была полностью под 1.0006 и всё работало. Случилась кое какая проблема (та проблема ранее, с безлоговым вылетом), я грешным делом подумал, что она из-за скриптов, почистил скрипты и недостающие (в основном xr_, _manager) взял из другой геймдаты, видимо из 1.0004. Сейчас попробую закинуть их из 1.0006. Посмотрим. Да, дело в этом. в Xr_manager на 340 строке у меня - dialog_manager.load(self.object, reader), а в 1.0006 dialog_manager.load(self.object, reader, self.npc_script_version) God save Hatsune Miku! Ссылка на комментарий
Капрал Хикс 500 Опубликовано 7 Августа Поделиться Опубликовано 7 Августа 02.08.2024 в 16:51, Labadal сказал: 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 Не работает проверка на взятый квест почему-то... Ссылка на комментарий
Labadal 59 Опубликовано 7 Августа Поделиться Опубликовано 7 Августа @Капрал Хикс А у квеста есть подпункты? God save Hatsune Miku! Ссылка на комментарий
Norman Eisenherz 283 Опубликовано 7 Августа Поделиться Опубликовано 7 Августа В ТЧ task_num = 0 – само задание, 1 и дальше – видимые задачи. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Капрал Хикс 500 Опубликовано 7 Августа Поделиться Опубликовано 7 Августа @Labadal , разведать местность, вернуться за наградой. @Norman Eisenherz , хм... Тогда ЧЯДНТ? Ссылка на комментарий
Labadal 59 Опубликовано 8 Августа Поделиться Опубликовано 8 Августа (изменено) @Капрал Хикс Попробуй в лог вывести что выводится в task_status. То бишь: local task_status = db.actor:get_task_state("тут пишешь id квеста", 0) get_console():execute(task_status) Дальше посмотрим. Изменено 8 Августа пользователем Labadal God save Hatsune Miku! Ссылка на комментарий
naxac 2 414 Опубликовано 8 Августа Поделиться Опубликовано 8 Августа 19 часов назад, Капрал Хикс сказал: if task_status == 0 then В lua_help есть такой класс: C++ class task { const completed = 2; const fail = 0; const in_progress = 1; const task_dummy = -1; }; Из названий констант, думаю, понятно, какая что значит. Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Labadal 59 Опубликовано 8 Августа Поделиться Опубликовано 8 Августа (изменено) @naxac Да я-то ему уже подробно расписал, другое дело интересно почему не работает. Такой вопросик интересный, возможно дело в логике, хотя её не трогал. Суть вот в чём, командир блокпоста с кордона, раньше при спавне всегда шёл к себе в комнату, на свои координаты, а сейчас почему-то при спавне сначала уходит к бункеру сидоровича, садится там возле забора, достаёт колбасу, исчезает, появляется на блокпосту и идёт на своё место. (если ранить в процессе ухода с блокпоста, и отбежать с глаз долой, то как успокоится идет на свои координаты) Вижу такое впервые. Изменено 8 Августа пользователем Labadal God save Hatsune Miku! Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти