Svoboда 3 Опубликовано 23 Апреля 2009 Поделиться Опубликовано 23 Апреля 2009 Тема для обсуждения скриптов всего и всех в серии игр STALKER. Задавая вопрос (!): 1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего; 2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме); 3. Изучите информацию которая может вам помочь: Stalkerin. Там есть много хороших статей касательно данной темы.Уроки по модостроению. Есть рабочие примеры готовых скриптов различного назначения. Справочное руководство по языку Lua 5.1https://www.mediawiki.org/wiki/Extension:Scribunto/Lua_reference_manual/ruСправочник по функциям и классам. Собрано много информации по функциям и классам, не всем, но по основные сведения предоставлены. Логика со вступлением и четырьмя частями: ВступлениеЧасть перваяЧасть втораяЧасть третьяЧасть четвертая. Smart_terrain (в простонароде - гулаг)Интересный способ настроики логики для гулаговСкриптовая часть игровой логики 4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос; 5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе; 6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода; 7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины. 8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ. 9. И помните: «Правильно заданный вопрос – половина ответа». Какие вопросы следует задавать, а какие нет... Задавайте вопросы, которые касаются непосредственно скриптов и их работы, т.е. Вы что-то делаете, а у Вас что-то не получается, при этом у Вас на руках должен быть хотя бы какой-то код, свидетельствующий о Вашей причастности к вопросу. Вопросы которые будут удалятся, следовательно их задавать не нужно:-- Где находится та или иная функция? Для ответа используем поиск по словам среди файлов оригинальной игры или мода, если объект поиска относится к нему, при помощью программы, которая Вам наиболее симпатизирует;-- Как сделать что-то/то-то? С подобными вопросами, либо в "ковырялки", где Вам вероятнее всего так же не ответят, либо выдвигаем мысли, подкреплённые теорией, практикой (идеальный вариант) и здравым рассудком;-- Вопросы со смыслом: "сделайте", "совместите" и подобными глаголами повелительного наклонения.-- К тому же удалению будут подвергаться вопросы, в которых масштабно не используются теги, для отделения кода и цитат от основного текста, а также не вписан в спойлер код размером превышающие семь строк.Ответ на возможно возникший вопрос: В какую тему можно обратиться по поводу логики и спавна объектов? В тему "ковырялок" соответствующей версии игры, для которой Вы задаёте вопрос. И последнее: очень рекомендовано к прочтению Правила форума 1 2 Ссылка на комментарий
Это популярное сообщение. Купер 2 992 Опубликовано 3 Августа 2024 Это популярное сообщение. Поделиться Опубликовано 3 Августа 2024 Дайте угадаю, так сказать, методом телепатического стука! А прямиком из 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 2 Ссылка на комментарий
Labadal 68 Опубликовано 5 Августа 2024 Поделиться Опубликовано 5 Августа 2024 @Купер 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 531 Опубликовано 5 Августа 2024 Поделиться Опубликовано 5 Августа 2024 Здесь из FAQ на ресурсе: 1 Здесь могла быть ваша реклама. Ссылка на комментарий
naxac 2 477 Опубликовано 5 Августа 2024 Поделиться Опубликовано 5 Августа 2024 (изменено) @Labadal , там весь скрипт переделывать надо, в том числе и в тех местах, где создаются уникальные id для фраз. Возьми просто родной скрипт от 6-го патча. Изменено 5 Августа 2024 пользователем naxac 2 2 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Labadal 68 Опубликовано 6 Августа 2024 Поделиться Опубликовано 6 Августа 2024 @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 255 Опубликовано 6 Августа 2024 Поделиться Опубликовано 6 Августа 2024 1 час назад, Labadal сказал: Переменная ver в функции function load(npc, reader, ver) почему-то уходит в nil См. строку 342 в xr_motivator.script (патч 1.0006). Мало заменить функцию из одного патча функцией из другого, надо ещё понимать, что ты делаешь. Если число аргументов увеличилось, откуда взяться значению добавленного аргумента? Только из места вызова самой функции, иначе будет пресловутый nil. 1 1 Инструмент Ссылка на комментарий
naxac 2 477 Опубликовано 6 Августа 2024 Поделиться Опубликовано 6 Августа 2024 1 час назад, Labadal сказал: это ведь не решение У тебя стоит какой-то мод, предназначенный для 4 патча, а движок - 6 патча. Отсюда и все проблемы с зависанием нпс, и вот эта трабла с диалог_менеджером тоже. 1 1 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Labadal 68 Опубликовано 6 Августа 2024 Поделиться Опубликовано 6 Августа 2024 @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! Ссылка на комментарий
Капрал Хикс 541 Опубликовано 7 Августа 2024 Поделиться Опубликовано 7 Августа 2024 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 68 Опубликовано 7 Августа 2024 Поделиться Опубликовано 7 Августа 2024 @Капрал Хикс А у квеста есть подпункты? God save Hatsune Miku! Ссылка на комментарий
Norman Eisenherz 322 Опубликовано 7 Августа 2024 Поделиться Опубликовано 7 Августа 2024 В ТЧ task_num = 0 – само задание, 1 и дальше – видимые задачи. Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Капрал Хикс 541 Опубликовано 7 Августа 2024 Поделиться Опубликовано 7 Августа 2024 @Labadal , разведать местность, вернуться за наградой. @Norman Eisenherz , хм... Тогда ЧЯДНТ? Ссылка на комментарий
Labadal 68 Опубликовано 8 Августа 2024 Поделиться Опубликовано 8 Августа 2024 (изменено) @Капрал Хикс Попробуй в лог вывести что выводится в task_status. То бишь: local task_status = db.actor:get_task_state("тут пишешь id квеста", 0) get_console():execute(task_status) Дальше посмотрим. Изменено 8 Августа 2024 пользователем Labadal God save Hatsune Miku! Ссылка на комментарий
naxac 2 477 Опубликовано 8 Августа 2024 Поделиться Опубликовано 8 Августа 2024 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 68 Опубликовано 8 Августа 2024 Поделиться Опубликовано 8 Августа 2024 (изменено) @naxac Да я-то ему уже подробно расписал, другое дело интересно почему не работает. Такой вопросик интересный, возможно дело в логике, хотя её не трогал. Суть вот в чём, командир блокпоста с кордона, раньше при спавне всегда шёл к себе в комнату, на свои координаты, а сейчас почему-то при спавне сначала уходит к бункеру сидоровича, садится там возле забора, достаёт колбасу, исчезает, появляется на блокпосту и идёт на своё место. (если ранить в процессе ухода с блокпоста, и отбежать с глаз долой, то как успокоится идет на свои координаты) Вижу такое впервые. Изменено 8 Августа 2024 пользователем Labadal God save Hatsune Miku! Ссылка на комментарий
AndrewMor 530 Опубликовано 9 Августа 2024 Поделиться Опубликовано 9 Августа 2024 03.08.2024 в 02:19, ted.80 сказал: последняя строчка eat_portions_num = -1 обозначает что предмет можно есть бесконечно он не пропадает из инвентаря и спавнить заново не нужно - пользуйся Надо ж, не знал, впервые слышу 1 Сталкер - наше всё! Ссылка на комментарий
Капрал Хикс 541 Опубликовано 9 Августа 2024 Поделиться Опубликовано 9 Августа 2024 @Labadal , добавил строчку с выводом в лог, получил в консоли красным такое при заходе в спейс-рестриктор: ! Unknown command: -1 Вылета нет. Ссылка на комментарий
Labadal 68 Опубликовано 9 Августа 2024 Поделиться Опубликовано 9 Августа 2024 (изменено) @Капрал Хикс Так у тебя всё работает. -1 значит, что задание у тебя не взято. 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 Изменено 9 Августа 2024 пользователем Labadal 1 God save Hatsune Miku! Ссылка на комментарий
Капрал Хикс 541 Опубликовано 9 Августа 2024 Поделиться Опубликовано 9 Августа 2024 (изменено) @Labadal , очень странно... Буду перепроверять все названия, может где-то опечатка. Изменено 9 Августа 2024 пользователем Капрал Хикс Ссылка на комментарий
Капрал Хикс 541 Опубликовано 11 Августа 2024 Поделиться Опубликовано 11 Августа 2024 Разобрался... Работает, но есть нюанс. Корректно проверяется название взятого квеста из файла game_tasks_by_vendor.xml, например eliminate_lager_trader. Т.е., как я понимаю, проверяется наличие взятого у квестодателя любого квеста данного типа. Если подставить название конкретного квеста из task_manager.ltx, например tm_eliminate_camp_1, то проверка не срабатывает. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти