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/
Kirgudu 1 370 Опубликовано 5 Мая 2024 Поделиться Опубликовано 5 Мая 2024 4 часа назад, CiberZold сказал: обычно юзают цикл перебора всех алайф объекту Порочный совет. "Обычно" наоборот, стараются так не делать, а если советовать такое, неплохо бы объяснять все минусы этого подхода. Да ещё и пример написан с ошибками (об этом ниже). @Balavnik, минус, причём жирный, заключается именно в переборе 65 тысяч (в примере) или в среднем 33 тысяч объектов. Что если такой поиск нужно делать периодически? А если он сам находится внутри другого цикла и/или содержит в себе достаточно внушительный код? Подход "процессор вывезет" сработает у одного, а у другого - приведёт к фризам. Скрытый текст Если тебе необходимо удалить кого-то совершенно определённого и никого больше таким образом не удалять - лучше адресоваться к story_id и получать объект по этому признаку. Если необходимо удалить случайного персонажа, но при этом создаваемого в строго определённый момент строго определённым образом - лучше как-то запомнить его точный идентификатор, а потом использовать его при удалении. Если необходимо удалить одного или всех НПС по какому-то фиксированному признаку - лучше проверить признак и запомнить этих персонажей в момент загрузки из сейва или их спавна, а потом, опять же, удалять адресно. Да, так сложнее, но при этом правильнее. Способ же с полным перебором следует использовать тогда и только тогда, когда никакой другой в принципе применить нельзя. Для целей обучения он, конечно, подойдёт, но на будущее необходимо чётко представлять последствия. А пример выше, как я уже сказал, содержит в себе как минимум 2 ошибки. Первая: после нахождения объекта с именем "bar_dolg_respawn_3" цикл не остановлен и продолжится до достижения максимального числа 65535. После alife():release() следовало выполнить break или return. Вторая: если в игре существуют объекты с именем "bar_dolg_respawn_31", "bar_dolg_respawn_345" или, допустим, "foobar_dolg_respawn_3" - будут удалены все, поскольку все эти имена содержат одно и то же, а именно то, что ищется, а паттерн, использованный для поиска, неточен. Не ошибки это только в одном случае: если необходимо удалить все объекты, содержащие в своём имени "bar_dolg_respawn_3". Но об этом надо сообщать особо. 3 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/617/#findComment-1483209
CiberZold 143 Опубликовано 5 Мая 2024 Поделиться Опубликовано 5 Мая 2024 (изменено) 2 часа назад, Kirgudu сказал: "Обычно" наоборот, стараются так не делать в данном примере когда один раз надо удалить что-то вполне себе вариант, постоянно конечно такой цикл вешать не стоит. 2 часа назад, Kirgudu сказал: Первая: после нахождения объекта с именем "bar_dolg_respawn_3" цикл не остановлен и продолжится до достижения максимального числа 65535. в чём ошибка ,если как раз и нужно удалить всех неписей, пример с bar_dolg_respawn_3 был не для повторения вслепую, а для общего шаблона так сказать. особенно мой пример как раз хорош ,когда надо удалять заспавненных по скрипту нпс) потому что те нпс которые спавнятся через аллспавн им можно задать имя в самом алл-спавне и к ним можно обращаться по этому уникальному имени, а те что созданы через alife():create им игра сама назначает имя, прибавляя числа случайные к названию секции на которой они созданы, поэтому неписей с именем частью которого будет секция bar_dolg_respawn_3 вполне может наспавниться много, и вот чтоб их всех удалить их разом мой метод как раз самое то ,ну если я правильно понял задачу автора вопроса) Изменено 5 Мая 2024 пользователем CiberZold Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/617/#findComment-1483214
Kirgudu 1 370 Опубликовано 5 Мая 2024 Поделиться Опубликовано 5 Мая 2024 Вот именно, что возникает много разных "если" и "но". 1 час назад, CiberZold сказал: в чём ошибка ,если как раз и нужно удалить всех неписей Где было написано про удаление всех? Ни в вопросе, ни в ответе ни единого слова, намекающего на это. Если хочешь принести пользу, необходимо объяснять свои ответы, иначе они могут трактоваться как ошибочные. 1 час назад, CiberZold сказал: особенно мой пример как раз хорош ,когда надо удалять заспавненных по скрипту нпс Вот я заспавнил скриптом одного НПС, мне больше не надо. Тоже будешь удалять перебором, или здесь возникнет ещё одно невысказанное "если"? Вопрос риторический, ответ не нужен. 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/617/#findComment-1483224
CiberZold 143 Опубликовано 5 Мая 2024 Поделиться Опубликовано 5 Мая 2024 2 часа назад, Kirgudu сказал: Где было написано про удаление всех? даже если надо удалить одного, секция bar_dolg_respawn_3 подразумевает, что это какой-то респавн, за то время пока дойдёт до ручного спавна и удаления, игра сама может наспавнить несколько неписей на этой секции и они будут с этой строчкой в имени, также как и нужный нам непись, потому можно и удалить их всех скопом вместе с нужным нам нпс, здесь делать выход из цикла после первого удалённого как раз приведёт к тому, что мы можем удалить левого нпс, а нужного нет, потому цикл надо довести до конца, чтоб он удалили всех с похожими именами (бесполезных сим неписей) и заодно и нужного на удаление 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/617/#findComment-1483228
Balavnik 178 Опубликовано 6 Мая 2024 Поделиться Опубликовано 6 Мая 2024 Можно ли менять свойства объектов, например condition у оружия, просто делая равенство См.Пример., или существуют специальные методы? Скрытый текст weapon:condition() = 1 Жить стало лучше, жить стало веселей. А когда веселей живётся, то работа скорится. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/617/#findComment-1483257
Norman Eisenherz 355 Опубликовано 6 Мая 2024 Поделиться Опубликовано 6 Мая 2024 obj:set_condition(num) Возможно, в OGSR есть метод и для оффлайн-объектов. 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/617/#findComment-1483258
Balavnik 178 Опубликовано 6 Мая 2024 Поделиться Опубликовано 6 Мая 2024 @Norman Eisenherz А где-то можно список получить этих методов? Каждый раз спрашивать - засорять тему. Жить стало лучше, жить стало веселей. А когда веселей живётся, то работа скорится. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/617/#findComment-1483259
Kirgudu 1 370 Опубликовано 6 Мая 2024 Поделиться Опубликовано 6 Мая 2024 @Купер уже набил примерно то же самое, но опоздал секунд на 20. @Balavnik от себя хочу добавить ещё один способ: поиск по форуму. Пример для "состояние предмета" с вхождением всех слов: https://www.amk-team.ru/forum/search/?&q=состояние предмета&quick=1&search_and_or=and&sortby=relevancy Каждый второй пост в результатах содержит искомую функцию set_condition. Немного брюзжания: раньше считалось хорошим тоном сначала поискать ответ на свой вопрос в старых постах, коих за столько лет накопилось изрядно, и только потом - писать. 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/617/#findComment-1483263
1_Draken_1 2 Опубликовано 10 Мая 2024 Поделиться Опубликовано 10 Мая 2024 (изменено) https://imgur.com/5mgNkfl То что выделено в квадрат это как я понял имя на которое отсылаются другие скрипты, но это не точно что то тут не так и из-за того что механика переехала в движок я теперь не знаю как мне здесь указать имя на которое в дальнейшем отсылаюсь что вывести на худ в процентах, подскажите что не так А ниже скрины где это используется, и укажите может где ошибся Цитата https://imgur.com/h7XU1ra https://imgur.com/DWAd2Ky https://imgur.com/undefined Изменено 10 Мая 2024 пользователем 1_Draken_1 AMD FX (tm)-6300 Six-Core (6 X 3.50GHz); RAM 16Gb; GeForce GTX 1660 Super (6Gb).Windows -10 Home (х64) My ArtStation - https://www.artstation.com/artem344 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/617/#findComment-1483429
Balavnik 178 Опубликовано 12 Мая 2024 Поделиться Опубликовано 12 Мая 2024 Каким образом лучше всего таймеры делать? В биндере прописывать или как-то иначе? Жить стало лучше, жить стало веселей. А когда веселей живётся, то работа скорится. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/617/#findComment-1483537
Это популярное сообщение. Zander_driver 10 358 Опубликовано 13 Мая 2024 Это популярное сообщение. Поделиться Опубликовано 13 Мая 2024 (изменено) 06.05.2024 в 14:38, Balavnik сказал: А где-то можно список получить этих методов? lua_help.script, или форумы, или исходники движка на котором работаешь, (Последнее - самое надежное. Остальные могут врать). Но кроме этого.. Есть надежный метод проверить наличие определенного метода у определенного объекта. function check_obj_has_method(obj, method_name) if not obj then return false end if obj and obj[method_name] and type(obj[method_name]) == 'function' then return true end return false end -- Пример использования: local actor = db.actor check_obj_has_method(actor, 'section') -- вернет true check_obj_has_method(actor, 'id') -- вернет true check_obj_has_method(actor, 'section_name') -- вернет false check_obj_has_method(obj, 'section') -- Вернет false, т.к. obj не определен в данной области видимости. Ну или просто if obj and obj.какой_то_метод and type(obj.какой_то_метод) == 'function' then obj:какой_то_метод(аргументы) -- Вызываем наш метод. else -- Тут можно сообщить в лог, что у этого объекта нет такого метода, и как-то иначе эту ситуацию обработать. end Такими проверками легко можно избавиться от любых вылетов по вызовам несуществующих методов у чего-нибудь. Будь то клиентские, серверные, или еще какие-нибудь объекты. Да хоть вектора. И да, такой метод проверки применим к любому движку, на любой платформе сталкера. Изменено 13 Мая 2024 пользователем Zander_driver Добавил пример использования функции 2 2 3 Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил. Я понял что моя старая подпись что-то нарушает. Удалил все ссылки. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/617/#findComment-1483566
Balavnik 178 Опубликовано 16 Мая 2024 Поделиться Опубликовано 16 Мая 2024 Каким образом лучше всего отслеживать события? Например, поднятие актором определённого предмета двигает поршень. Думаю, в bind_stalker прописывать не лучшая идея. Жить стало лучше, жить стало веселей. А когда веселей живётся, то работа скорится. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/617/#findComment-1483808
_g.script 3 670 Опубликовано 16 Мая 2024 Поделиться Опубликовано 16 Мая 2024 43 минуты назад, Balavnik сказал: в bind_stalker прописывать не лучшая идея Прописывать можно где угодно. Но коллбек on_item_take именно в bind_stalker и вызов будет там. 2 Здесь могла быть ваша реклама. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/617/#findComment-1483811
Balavnik 178 Опубликовано 16 Мая 2024 Поделиться Опубликовано 16 Мая 2024 @mole venomous А не будет ли это шибко сильно тормозить игру? Я просто хочу таким макаром обработать +- 70 объектов. Жить стало лучше, жить стало веселей. А когда веселей живётся, то работа скорится. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/617/#findComment-1483816
Zander_driver 10 358 Опубликовано 16 Мая 2024 Поделиться Опубликовано 16 Мая 2024 2 часа назад, Balavnik сказал: Каким образом лучше всего отслеживать события? А что такое, по твоему, биндер вообще? Это скриптовой объект, который позволяет скриптам отслеживать события забинденного объекта. Т.е. он буквально вот для этого и создан. В биндерах находятся (могут находиться) обработчики всех событий которые могут происходить с объектом и отслеживаются движком. 1 час назад, Balavnik сказал: А не будет ли это шибко сильно тормозить игру? А каким образом? Код метода-обработчика вызывается только при срабатывании соответствующего колбека события. На каждом фрейме вызывается только update. 1 час назад, Balavnik сказал: обработать +- 70 объектов. Все в on_item_take? switch case по секции в помощь, Ну или по тому признаку по которому они у тебя различаются. Еще можно таблицу функций сделать с ключами-секциями, и по секции вызывать нужную из обработчика on_item_take. Как угодно можно. 1 1 Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine / Мимокрокодил. Я понял что моя старая подпись что-то нарушает. Удалил все ссылки. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/617/#findComment-1483828
Balavnik 178 Опубликовано 20 Мая 2024 Поделиться Опубликовано 20 Мая 2024 (изменено) Вырезаны ли функции работы с файловой системой? Хочу считать количество смертей актора. Какими командами можно редактировать user.ltx? Изменено 20 Мая 2024 пользователем Balavnik Жить стало лучше, жить стало веселей. А когда веселей живётся, то работа скорится. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/617/#findComment-1484030
Norman Eisenherz 355 Опубликовано 20 Мая 2024 Поделиться Опубликовано 20 Мая 2024 1. Библиотека io – чтение и запись текстовых файлов (есть ЧН/ЗП, про OGSR не знаю). 2. Написать в консоли help, искать примеры по названиям. 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/617/#findComment-1484033
Kirgudu 1 370 Опубликовано 20 Мая 2024 Поделиться Опубликовано 20 Мая 2024 4 часа назад, Norman Eisenherz сказал: про OGSR не знаю В OGSR тоже есть. Везде есть, кроме оригинала ТЧ и основанных на нём без расширения или редактирования движка модов. 3 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/617/#findComment-1484045
Balavnik 178 Опубликовано 21 Мая 2024 Поделиться Опубликовано 21 Мая 2024 (изменено) Товарищи, parent_id ящика в оффлайне как получить? Что-то не нашел нигде инфы. Прикладываю код. Суть: спавн объекта секции(пока водки) в ящике по известному sid. Пока не выходит реализовать. Скрытый текст function spawn_remkom(first_speaker, second_speaker) local sim = alife() local obj = level.object_by_sid(5003) alife():create("vodka",vector():set(39.420829772949,-0.10841239988804,25.139078140259), 1, obj:game_vertex_id(), obj:id()) end Изменено 21 Мая 2024 пользователем Balavnik Жить стало лучше, жить стало веселей. А когда веселей живётся, то работа скорится. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/617/#findComment-1484129
Kirgudu 1 370 Опубликовано 21 Мая 2024 Поделиться Опубликовано 21 Мая 2024 @Balavnik function spawn_remkom(first_speaker, second_speaker) local sobj = alife():story_object(5003) alife():create("vodka", vector(), 0, 0, sobj.id) end Примечание: при спавне в контейнере точные координаты и вертексы указывать не обязательно, можно обойтись значениями по умолчанию. 1 2 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/617/#findComment-1484143
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти