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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/
_Val_ 2 336 Опубликовано 5 Декабря 2017 Поделиться Опубликовано 5 Декабря 2017 @BossBoroda А что ты делаешь в теме Скриптование? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/440/#findComment-1141481
aka_sektor 1 478 Опубликовано 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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/440/#findComment-1141560
dsh 3 824 Опубликовано 5 Декабря 2017 Поделиться Опубликовано 5 Декабря 2017 @aka_sektor db.actor не определен похоже Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/440/#findComment-1141570
aka_sektor 1 478 Опубликовано 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 Проверил, теперь не вылетает. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/440/#findComment-1141613
buffy 4 Опубликовано 6 Декабря 2017 Поделиться Опубликовано 6 Декабря 2017 @aka_sektor вылет, возможно, происходит тогда, когда карта уже загрузилась и ты вызываешь эту функцию, а игрок ещё не появился. Соответственно db.actor ещё не существует(равен nil). Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/440/#findComment-1141836
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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/440/#findComment-1141921
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) Что это за ошибка? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/440/#findComment-1141923
dsh 3 824 Опубликовано 6 Декабря 2017 Поделиться Опубликовано 6 Декабря 2017 21 minutes ago, Nazgool said: local actor = db.actor Это экономия на спичках. Имеет смысл только в очень частых и нагруженных циклах и то, сначала бы померить нужно. Возможно в условиях выполнения около 50 раз в секунду, если мы возьмем апдейт актора, это ни при каких условиях не будет иметь смысла. 3 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/440/#findComment-1141926
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-й строке прописано. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/440/#findComment-1141941
Fenrir02 199 Опубликовано 6 Декабря 2017 Поделиться Опубликовано 6 Декабря 2017 Вот что в этой строчке: local a ; a = 1/a; get_console():execute( "quit" ) Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/440/#findComment-1141954
Fenrir02 199 Опубликовано 6 Декабря 2017 Поделиться Опубликовано 6 Декабря 2017 1 час назад, AndreySol сказал: Открой редактором, у которого есть нумерация строк, файл gamedata\scripts\_util.script и смотри, что в нем на 20-й строке прописано. local a ; a = 1/a; get_console():execute( "quit" ) - не знаю что это означает. Пробовал удалить эту строку - получаю вылет с ссылкой на другой фаил Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/440/#findComment-1141960
Dennis_Chikin 3 665 Опубликовано 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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/440/#findComment-1142030
dsh 3 824 Опубликовано 7 Декабря 2017 Поделиться Опубликовано 7 Декабря 2017 @Dennis_Chikin все, что угодно, может стать всем, чем угодно, в результате очепятки. И actor на следующей строке с лёгкостью может стать aktor-ом. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/440/#findComment-1142043
Dennis_Chikin 3 665 Опубликовано 7 Декабря 2017 Поделиться Опубликовано 7 Декабря 2017 Может. Чем больше набиваем - тем больше опечаток. А когда при достижении некоторого объема в ход идет копипаста - вот здесь и начинается настоящее веселье... Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/440/#findComment-1142046
_Sk8_AsTeR_ 122 Опубликовано 9 Декабря 2017 Поделиться Опубликовано 9 Декабря 2017 Господа, а никто не реализовывал такую вещь, чтобы НПС стреляли реальными патронами из инвентаря? То есть нет патронов - нечем стрелять НПСишке. Прошу прощения у модеров, если не в ту ветку строчу. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/440/#findComment-1142393
BossBoroda 7 Опубликовано 9 Декабря 2017 Поделиться Опубликовано 9 Декабря 2017 Кто знает, может можно в сталкере физику машин нормальную сделать, или кто-то уже сделал и можно её из мода достать? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/440/#findComment-1142456
Graff46 621 Опубликовано 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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/440/#findComment-1143360
dsh 3 824 Опубликовано 13 Декабря 2017 Поделиться Опубликовано 13 Декабря 2017 @Graff46 можно. Почему нет. Главное обратно прочитать в правильном порядке и за границу нетпакета не вылезти. 1 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/440/#findComment-1143364
Kirgudu 1 328 Опубликовано 13 Декабря 2017 Поделиться Опубликовано 13 Декабря 2017 (изменено) @Graff46 дополню ответ dsh очевидным (хотя, может, и не для всех) уточнением: после таких изменений нужна новая игра, старые сейвы, не содержащие добавленных данных, читаться будут некорректно. Изменено 13 Декабря 2017 пользователем Kirgudu Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/440/#findComment-1143385
Graff46 621 Опубликовано 13 Декабря 2017 Поделиться Опубликовано 13 Декабря 2017 13 часов назад, Kirgudu сказал: после таких изменений нужна новая игра А что у нас по пстор'у ? Эта система вроде более гибкая? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/440/#findComment-1143526
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти