Balavnik 108 Опубликовано 4 Мая Поделиться Опубликовано 4 Мая (изменено) @Kirgudu Хм. Может я неправильно пишу? Прикладываю код. Скрытый текст Объект в онлайне. local dolg = create("bar_dolg_respawn_3",-212.095703125,-23.186395645142,-122.46632385254,41290,59, 1) release_dolg_kordon(dolg) function release_dolg_kordon(obj) send_message("HI") // Отладка if obj ~= nil then local objid = alife():object(obj.id) alife():release(objid, true) end end P.s. Я видимо ещё не до конца понял многих тонкостей концепции алайфа. Изменено 4 Мая пользователем Balavnik Осенний каламбур. Сентябрь - лето. Ссылка на комментарий
Kirgudu 1 191 Опубликовано 4 Мая Поделиться Опубликовано 4 Мая В чём вопрос-то заключается? Чисто скриптовых ошибок не видно, а вот как движок воспринимает попытку удаления сразу после создания (в том же блоке исполнения кода) - сказать не могу. Пусть знатоки OGSR отвечают. 1 Инструмент Ссылка на комментарий
CiberZold 142 Опубликовано 5 Мая Поделиться Опубликовано 5 Мая 9 часов назад, Balavnik сказал: Я видимо ещё не до конца понял многих тонкостей концепции алайфа. чтоб не париться с id (там проблема что id можно получить от объекта к которому обращаешься в конкретной функции), а если тебе надо удалить в влюбой время ,в любом месте на любой локации серверный объект обычно юзают цикл перебора всех алайф объекту и по имени удаляем. for a=1,65635 do local obj=alife():object(a) if obj and string.find(obj:name(),"bar_dolg_respawn_3") then alife():release(obj, true) end end 1 Ссылка на комментарий
Norman Eisenherz 305 Опубликовано 5 Мая Поделиться Опубликовано 5 Мая @Kirgudu Я познал путь GSC: мало прописать новый класс и группу профилей для новых сталкеров – надо еще указать этот класс в [spawn_sections.ltx] со ссылкой… на тот же класс? При этом в логе вылета ссылка на движковую проверку с какими-то векторами – поди пойми, чего игра хочет. 4 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Kirgudu 1 191 Опубликовано 5 Мая Поделиться Опубликовано 5 Мая 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 Инструмент Ссылка на комментарий
CiberZold 142 Опубликовано 5 Мая Поделиться Опубликовано 5 Мая (изменено) 2 часа назад, Kirgudu сказал: "Обычно" наоборот, стараются так не делать в данном примере когда один раз надо удалить что-то вполне себе вариант, постоянно конечно такой цикл вешать не стоит. 2 часа назад, Kirgudu сказал: Первая: после нахождения объекта с именем "bar_dolg_respawn_3" цикл не остановлен и продолжится до достижения максимального числа 65535. в чём ошибка ,если как раз и нужно удалить всех неписей, пример с bar_dolg_respawn_3 был не для повторения вслепую, а для общего шаблона так сказать. особенно мой пример как раз хорош ,когда надо удалять заспавненных по скрипту нпс) потому что те нпс которые спавнятся через аллспавн им можно задать имя в самом алл-спавне и к ним можно обращаться по этому уникальному имени, а те что созданы через alife():create им игра сама назначает имя, прибавляя числа случайные к названию секции на которой они созданы, поэтому неписей с именем частью которого будет секция bar_dolg_respawn_3 вполне может наспавниться много, и вот чтоб их всех удалить их разом мой метод как раз самое то ,ну если я правильно понял задачу автора вопроса) Изменено 5 Мая пользователем CiberZold Ссылка на комментарий
Kirgudu 1 191 Опубликовано 5 Мая Поделиться Опубликовано 5 Мая Вот именно, что возникает много разных "если" и "но". 1 час назад, CiberZold сказал: в чём ошибка ,если как раз и нужно удалить всех неписей Где было написано про удаление всех? Ни в вопросе, ни в ответе ни единого слова, намекающего на это. Если хочешь принести пользу, необходимо объяснять свои ответы, иначе они могут трактоваться как ошибочные. 1 час назад, CiberZold сказал: особенно мой пример как раз хорош ,когда надо удалять заспавненных по скрипту нпс Вот я заспавнил скриптом одного НПС, мне больше не надо. Тоже будешь удалять перебором, или здесь возникнет ещё одно невысказанное "если"? Вопрос риторический, ответ не нужен. 1 Инструмент Ссылка на комментарий
CiberZold 142 Опубликовано 5 Мая Поделиться Опубликовано 5 Мая 2 часа назад, Kirgudu сказал: Где было написано про удаление всех? даже если надо удалить одного, секция bar_dolg_respawn_3 подразумевает, что это какой-то респавн, за то время пока дойдёт до ручного спавна и удаления, игра сама может наспавнить несколько неписей на этой секции и они будут с этой строчкой в имени, также как и нужный нам непись, потому можно и удалить их всех скопом вместе с нужным нам нпс, здесь делать выход из цикла после первого удалённого как раз приведёт к тому, что мы можем удалить левого нпс, а нужного нет, потому цикл надо довести до конца, чтоб он удалили всех с похожими именами (бесполезных сим неписей) и заодно и нужного на удаление 1 Ссылка на комментарий
Balavnik 108 Опубликовано 6 Мая Поделиться Опубликовано 6 Мая Можно ли менять свойства объектов, например condition у оружия, просто делая равенство См.Пример., или существуют специальные методы? Скрытый текст weapon:condition() = 1 Осенний каламбур. Сентябрь - лето. Ссылка на комментарий
Norman Eisenherz 305 Опубликовано 6 Мая Поделиться Опубликовано 6 Мая obj:set_condition(num) Возможно, в OGSR есть метод и для оффлайн-объектов. 1 Мини-моды: ТЧ ЧН ЗП Шпаргалка Ссылка на комментарий
Balavnik 108 Опубликовано 6 Мая Поделиться Опубликовано 6 Мая @Norman Eisenherz А где-то можно список получить этих методов? Каждый раз спрашивать - засорять тему. Осенний каламбур. Сентябрь - лето. Ссылка на комментарий
Купер 2 804 Опубликовано 6 Мая Поделиться Опубликовано 6 Мая Базовые понятия: здесь или здесь/здесь/здесь (воспринимается проще, потому что спойлеры "не побиты" ). Многое можно найти непосредственно в lua_help.script непосредственно из ресурсов игры, правда, иногда не всё и не всегда соответствует действительности. Непосредственно по OGSR - естественно, на wiki проекта прежде всего, благо документация по проекту более чем подробная. 1 1 Ссылка на комментарий
Kirgudu 1 191 Опубликовано 6 Мая Поделиться Опубликовано 6 Мая @Купер уже набил примерно то же самое, но опоздал секунд на 20. @Balavnik от себя хочу добавить ещё один способ: поиск по форуму. Пример для "состояние предмета" с вхождением всех слов: https://www.amk-team.ru/forum/search/?&q=состояние предмета&quick=1&search_and_or=and&sortby=relevancy Каждый второй пост в результатах содержит искомую функцию set_condition. Немного брюзжания: раньше считалось хорошим тоном сначала поискать ответ на свой вопрос в старых постах, коих за столько лет накопилось изрядно, и только потом - писать. 2 Инструмент Ссылка на комментарий
1_Draken_1 2 Опубликовано 10 Мая Поделиться Опубликовано 10 Мая (изменено) https://imgur.com/5mgNkfl То что выделено в квадрат это как я понял имя на которое отсылаются другие скрипты, но это не точно что то тут не так и из-за того что механика переехала в движок я теперь не знаю как мне здесь указать имя на которое в дальнейшем отсылаюсь что вывести на худ в процентах, подскажите что не так А ниже скрины где это используется, и укажите может где ошибся Цитата https://imgur.com/h7XU1ra https://imgur.com/DWAd2Ky https://imgur.com/undefined Изменено 10 Мая пользователем 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 Ссылка на комментарий
Balavnik 108 Опубликовано 12 Мая Поделиться Опубликовано 12 Мая Каким образом лучше всего таймеры делать? В биндере прописывать или как-то иначе? Осенний каламбур. Сентябрь - лето. Ссылка на комментарий
Купер 2 804 Опубликовано 12 Мая Поделиться Опубликовано 12 Мая 1. Применительно +/- к оригиналу: здесь. Сразу осваивать и разбираться в механике работы. Оптимальнее вряд ли что сделать получится. 2. Кастомные варианты движков, где это всё реализовано непосредственно внутри возможностями того или иного движка. 1 Ссылка на комментарий
Это популярное сообщение. Zander_driver 10 333 Опубликовано 13 Мая Это популярное сообщение. Поделиться Опубликовано 13 Мая (изменено) 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 Мая пользователем Zander_driver Добавил пример использования функции 2 2 3 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
Balavnik 108 Опубликовано 16 Мая Поделиться Опубликовано 16 Мая Каким образом лучше всего отслеживать события? Например, поднятие актором определённого предмета двигает поршень. Думаю, в bind_stalker прописывать не лучшая идея. Осенний каламбур. Сентябрь - лето. Ссылка на комментарий
mole venomous 3 337 Опубликовано 16 Мая Поделиться Опубликовано 16 Мая 43 минуты назад, Balavnik сказал: в bind_stalker прописывать не лучшая идея Прописывать можно где угодно. Но коллбек on_item_take именно в bind_stalker и вызов будет там. 2 Здесь могла быть ваша реклама. Ссылка на комментарий
Balavnik 108 Опубликовано 16 Мая Поделиться Опубликовано 16 Мая @mole venomous А не будет ли это шибко сильно тормозить игру? Я просто хочу таким макаром обработать +- 70 объектов. Осенний каламбур. Сентябрь - лето. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти