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 Ссылка на комментарий
_Val_ 2 225 Опубликовано 5 Декабря 2017 Поделиться Опубликовано 5 Декабря 2017 @BossBoroda А что ты делаешь в теме Скриптование? Ссылка на комментарий
aka_sektor 1 477 Опубликовано 5 Декабря 2017 Поделиться Опубликовано 5 Декабря 2017 (изменено) Словил тут вылет, когда помер в ЗП: xr_conditions.script:2196: attempt to index field 'actor' (a nil value) Точнее при загрузке последнего сохранения. В кондишнс у меня добавлен код: function sad_predateli_pda() if (db.actor:object("sad_mudak_pda") ~= nil) and not (db.actor:has_info("sad_predateli_info")) then db.actor:give_info_portion("sad_predateli_info") end end 2196 это вторая строка, которая if В чем тут дело? Изначальная функция взята отсюда: http://www.amk-team.ru/forum/topic/8806-cop-kvesty/?page=2&tab=comments#comment-349951 Изменено 5 Декабря 2017 пользователем aka_sektor Discord-сервер modfaq.ru: https://discord.gg/9j42BXwB Ссылка на комментарий
dsh 3 824 Опубликовано 5 Декабря 2017 Поделиться Опубликовано 5 Декабря 2017 @aka_sektor db.actor не определен похоже dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
aka_sektor 1 477 Опубликовано 5 Декабря 2017 Поделиться Опубликовано 5 Декабря 2017 @dsh предложили добавить проверку актора на nil: function sad_predateli_pda() if db.actor ~= nil and db.actor:object("sad_mudak_pda") ~= nil and not db.actor:has_info("sad_predateli_info") then db.actor:give_info_portion("sad_predateli_info") end end Проверил, теперь не вылетает. Discord-сервер modfaq.ru: https://discord.gg/9j42BXwB Ссылка на комментарий
buffy 4 Опубликовано 6 Декабря 2017 Поделиться Опубликовано 6 Декабря 2017 @aka_sektor вылет, возможно, происходит тогда, когда карта уже загрузилась и ты вызываешь эту функцию, а игрок ещё не появился. Соответственно db.actor ещё не существует(равен nil). Ссылка на комментарий
Nazgool 250 Опубликовано 6 Декабря 2017 Поделиться Опубликовано 6 Декабря 2017 Не, всё нормально вроде. Но... Ну не принято так что-ли. Ну когда много раз вызывают одно и то же, то как-бы принято кэшировать. Не я же придумал. function sad_predateli_pda() local actor = db.actor if actor ~= nil and actor:object("sad_mudak_pda") ~= nil and not actor:has_info("sad_predateli_info") then actor:give_info_portion("sad_predateli_info") end end Ссылка на комментарий
Fenrir02 199 Опубликовано 6 Декабря 2017 Поделиться Опубликовано 6 Декабря 2017 Подскажите, что делать: добавил уникального персонажа в НС 2016 на Кордоне. Задал ему логику стоять на месте. Всё работает, но после его спавна, происходят постоянные вылеты с непонятным для меня логом: FATAL ERROR [error]Expression : fatal error [error]Function : CScriptEngine::lua_error [error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp [error]Line : 73 [error]Description : <no expression> [error]Arguments : LUA error: ...ogrammes\s.t.a.l.k.e.r\gamedata\scripts\_util.script:20: attempt to perform arithmetic on local 'a' (a nil value) Что это за ошибка? Важнейшая задача цивилизации - научить человека мыслить. Ссылка на комментарий
dsh 3 824 Опубликовано 6 Декабря 2017 Поделиться Опубликовано 6 Декабря 2017 21 minutes ago, Nazgool said: local actor = db.actor Это экономия на спичках. Имеет смысл только в очень частых и нагруженных циклах и то, сначала бы померить нужно. Возможно в условиях выполнения около 50 раз в секунду, если мы возьмем апдейт актора, это ни при каких условиях не будет иметь смысла. 3 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
AndreySol 215 Опубликовано 6 Декабря 2017 Поделиться Опубликовано 6 Декабря 2017 1 час назад, Fenrir02 сказал: [error]Arguments : LUA error: ...ogrammes\s.t.a.l.k.e.r\gamedata\scripts\_util.script:20: attempt to perform arithmetic on local 'a' (a nil value) Что это за ошибка? Открой редактором, у которого есть нумерация строк, файл gamedata\scripts\_util.script и смотри, что в нем на 20-й строке прописано. Ссылка на комментарий
Fenrir02 199 Опубликовано 6 Декабря 2017 Поделиться Опубликовано 6 Декабря 2017 Вот что в этой строчке: local a ; a = 1/a; get_console():execute( "quit" ) Важнейшая задача цивилизации - научить человека мыслить. Ссылка на комментарий
Fenrir02 199 Опубликовано 6 Декабря 2017 Поделиться Опубликовано 6 Декабря 2017 1 час назад, AndreySol сказал: Открой редактором, у которого есть нумерация строк, файл gamedata\scripts\_util.script и смотри, что в нем на 20-й строке прописано. local a ; a = 1/a; get_console():execute( "quit" ) - не знаю что это означает. Пробовал удалить эту строку - получаю вылет с ссылкой на другой фаил Важнейшая задача цивилизации - научить человека мыслить. Ссылка на комментарий
Dennis_Chikin 3 660 Опубликовано 7 Декабря 2017 Поделиться Опубликовано 7 Декабря 2017 (изменено) 16 часов назад, dsh сказал: Это экономия на спичках. спички при этом с легкостью необычайной могут выглядеть как bd.actor, dd.actor, bb.actor или даже db,actor Кроме того, это реально может быть actor без предварительного actor = db.actor не по тому, что "экономили на спичках", а по тому, что "пишу то, что думаю". Есть еще вариант, когда обращение к актору зачем-то надо до того, как он вошел в онлайн, и конструкция if db.actor then foo( db.actor, .... ) else foo( db.actor_proxy, ... ) end - написанная раз, этак, много - это уже не про "экономию на спичках", а куда-то в разряд развлечений с латексом, наручниками и плетками. (С чего, собственно, и начался этот трэд.) 14 часов назад, Fenrir02 сказал: local a ; a = 1/a; get_console():execute( "quit" ) А немного выше - русский текст про принудительную остановку игры и вывод того, что не нравится в "добавленном уникальном персонаже на кордоне". И все это есть в логе. Изменено 7 Декабря 2017 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
dsh 3 824 Опубликовано 7 Декабря 2017 Поделиться Опубликовано 7 Декабря 2017 @Dennis_Chikin все, что угодно, может стать всем, чем угодно, в результате очепятки. И actor на следующей строке с лёгкостью может стать aktor-ом. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Dennis_Chikin 3 660 Опубликовано 7 Декабря 2017 Поделиться Опубликовано 7 Декабря 2017 Может. Чем больше набиваем - тем больше опечаток. А когда при достижении некоторого объема в ход идет копипаста - вот здесь и начинается настоящее веселье... Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
_Sk8_AsTeR_ 120 Опубликовано 9 Декабря 2017 Поделиться Опубликовано 9 Декабря 2017 Господа, а никто не реализовывал такую вещь, чтобы НПС стреляли реальными патронами из инвентаря? То есть нет патронов - нечем стрелять НПСишке. Прошу прощения у модеров, если не в ту ветку строчу. Ссылка на комментарий
BossBoroda 7 Опубликовано 9 Декабря 2017 Поделиться Опубликовано 9 Декабря 2017 Кто знает, может можно в сталкере физику машин нормальную сделать, или кто-то уже сделал и можно её из мода достать? Ссылка на комментарий
Graff46 598 Опубликовано 12 Декабря 2017 Поделиться Опубликовано 12 Декабря 2017 Можно ли добавлять свои данные (в конец) для сохранения или смещение тут нельзя трогать? xr_logic.script ТЧ Скрытый текст function save_obj(obj, packet) printf("save_obj: obj:name()='%s'", obj:name()) local npc_id = obj:id() local st = db.storage[npc_id] printf("save_obj: ini_filename='%s'", utils.to_str(st.ini_filename)) printf("save_obj: section_logic='%s'", utils.to_str(st.section_logic)) printf("save_obj: active_section='%s'", utils.to_str(st.active_section)) printf("save_obj: gulag_name='%s'", utils.to_str(st.gulag_name)) if st.ini_filename then packet:w_stringZ(st.ini_filename) else packet:w_stringZ("") end if st.section_logic then packet:w_stringZ(st.section_logic) else packet:w_stringZ("") end if st.active_section then packet:w_stringZ(st.active_section) else packet:w_stringZ("") end --if st.active_scheme then -- packet:w_stringZ(st.active_scheme) --else -- packet:w_stringZ("") --end if st.gulag_name then packet:w_stringZ(st.gulag_name) else packet:w_stringZ("") end --packet:w_s32(st.stype) save_logic(obj, packet) if st.active_scheme then issue_event(obj, db.storage[npc_id][st.active_scheme], "save") end pstor_save_all(obj, packet) end Ссылка на комментарий
dsh 3 824 Опубликовано 13 Декабря 2017 Поделиться Опубликовано 13 Декабря 2017 @Graff46 можно. Почему нет. Главное обратно прочитать в правильном порядке и за границу нетпакета не вылезти. 1 1 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Kirgudu 1 249 Опубликовано 13 Декабря 2017 Поделиться Опубликовано 13 Декабря 2017 (изменено) @Graff46 дополню ответ dsh очевидным (хотя, может, и не для всех) уточнением: после таких изменений нужна новая игра, старые сейвы, не содержащие добавленных данных, читаться будут некорректно. Изменено 13 Декабря 2017 пользователем Kirgudu Инструмент Ссылка на комментарий
Graff46 598 Опубликовано 13 Декабря 2017 Поделиться Опубликовано 13 Декабря 2017 13 часов назад, Kirgudu сказал: после таких изменений нужна новая игра А что у нас по пстор'у ? Эта система вроде более гибкая? Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти