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 Ссылка на комментарий
Баба ЯГА 7 Опубликовано 1 Октября 2019 Поделиться Опубликовано 1 Октября 2019 7 минут назад, naxac сказал: for i = 1, count do хорошо, а COUNT - сколько ставить? Если больше 300000 - вылет upd: попробуй сам перебрать вертексы и сам всё увидишь, не работает такой перебор, он всё не перебирает. Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий
naxac 2 477 Опубликовано 1 Октября 2019 Поделиться Опубликовано 1 Октября 2019 (изменено) @Баба ЯГА, вот так только что попробовал, всё работает: Скрытый текст function ggg() local pos = db.actor:position() local vpos local n = 0 for i = 1, 595499 do -- для Кордона vpos = level.vertex_position(i) if vpos and vpos:distance_to_sqr(pos) < 9 then n = n + 1 log(i) end end log("found %s vertexes", n) end вот что получил: Скрытый текст 385291 386206 386207 386208 386209 386210 387120 387121 387122 387123 387124 387125 387126 388033 388034 388035 388036 388037 388038 388039 388945 388946 388947 388948 388949 388950 388951 389852 389853 389854 389855 389856 389857 389858 389859 390747 390748 390749 390750 390751 390752 390753 391639 391640 391641 391642 391643 391644 391645 392549 392550 392551 392552 found 53 vertexes Изменено 1 Октября 2019 пользователем naxac Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Баба ЯГА 7 Опубликовано 1 Октября 2019 Поделиться Опубликовано 1 Октября 2019 @naxac, точно, проверил, всё работает! Ты меня просто спас Ничего не пойму, а чего у меня вылетало тогда? Я же вроде всё тоже-самое делал... 1 час назад, naxac сказал: с помощью, например, Graph Viewer где его взять? Чтобы каждую локацию не декомпилировать для LE? Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий
naxac 2 477 Опубликовано 1 Октября 2019 Поделиться Опубликовано 1 Октября 2019 @Баба ЯГА, https://yadi.sk/d/jriWu9cMSPglHg Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Баба ЯГА 7 Опубликовано 1 Октября 2019 Поделиться Опубликовано 1 Октября 2019 @naxac, спасибо! Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий
abramcumner 1 174 Опубликовано 1 Октября 2019 Поделиться Опубликовано 1 Октября 2019 4 часа назад, Баба ЯГА сказал: Я же вроде всё тоже-самое делал... Вообще не то же самое. Ты перебирал game-вертексы, game-вертексы объединены в game_graph, у game-вертекса есть game_vertex_id. Соответствуют graph_point в СДК. Их на локацию в среднем по 250 штук, ну и на всю игру тысяч 5. А есть level-вертексы с level_vertex_id. Соотвествуют аи-нодам в СДК, на каждой локации по 500к. 3 Ссылка на комментарий
Graff46 598 Опубликовано 1 Октября 2019 Поделиться Опубликовано 1 Октября 2019 Интересует вопрос навигации НПС в оффлайне и на другие локации. Для того чтобы отправить куда-то НПС (он может уходить в оффлайн и переходить на другие локации) используется метод что-то вроде :set_move_path(). Я писал схемы логики без патч и лук поинтов, НПС передвигаются/стоят на основе данных левел вертексов, по сути задаем НПС поворот и заставляем идти пока дистанция до левел вертекса будет достаточно мала, это всё работает на онлайновском НПС и в пределах локации. Меня интересует вопрос можно ли скриптово без использования патч поинтов заставить НПС ходить в оффлайне и на другие локации? Ссылка на комментарий
Kirgudu 1 255 Опубликовано 1 Октября 2019 Поделиться Опубликовано 1 Октября 2019 @Баба ЯГА, обрати внимание на модуль lua_helper. В нём есть уже готовые функции как для поиска минимальных и максимальных game- и level-вертексов на локации, так и для определения ближайшего вертекса к заданным координатам ( а также куча других полезных функций). Если нет желания интегрировать весь модуль в свой мод, можно как минимум изучить реализацию. Инструмент Ссылка на комментарий
Баба ЯГА 7 Опубликовано 1 Октября 2019 Поделиться Опубликовано 1 Октября 2019 @abramcumner, начинаю вникать потихоньку... @Kirgudu, обязательно посмотрю. Ребята, как поставить метку на карту по заданным координатам? Не на объект, а просто в нужную точку на карте? upd: есть идея поставить пустой рестриктор и на него поставить метку, но возникает вопрос - можно ли ставить пустой рестриктор и будет ли это большая нагрузка на ресурсы если таких рестрикторов и меток будет скажем - 500 штук? upd2: где-то видел не могу найти - как заспавнить пустой рестриктор через скрипт? Нашёл, вот так можно? local sobj = alife():create( "space_restrictor", pos, lv, gv ) upd3: и ещё. можно ли поставить метку на level_vertex? Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий
Kirgudu 1 255 Опубликовано 1 Октября 2019 Поделиться Опубликовано 1 Октября 2019 @Баба ЯГА, initial, upd: никак, можно, не будет. upd2: сам же спрашивал и уже получал ответ здесь. upd3: только на объект. Инструмент Ссылка на комментарий
Баба ЯГА 7 Опубликовано 1 Октября 2019 Поделиться Опубликовано 1 Октября 2019 @Kirgudu, понял, спасибо. Возник вопрос: как узнать gv вертекса. если я знаю ID и позицию (координаты)? local lvid = 30087 local vpos = level.vertex_position( lvid ) local sobj = alife():create( "space_restrictor", vpos, lvid, gv ) -- КАК УЗНАТЬ gv ??? Как узнать gv ?? 9 минут назад, Kirgudu сказал: сам же спрашивал и уже получал ответ здесь. я помню что спрашивал уже это, искал тут, но не нашёл, пришлось спросить ещё раз... Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий
Kirgudu 1 255 Опубликовано 1 Октября 2019 Поделиться Опубликовано 1 Октября 2019 (изменено) @Баба ЯГА, навскидку на ум приходит только перебор вертексов вокруг твоих координат и определение вертекса с минимальным расстоянием. См. комментарии выше и lua_helper. И прекрати флудить, задавая те же вопросы другими словами. Изменено 1 Октября 2019 пользователем Kirgudu Инструмент Ссылка на комментарий
Баба ЯГА 7 Опубликовано 1 Октября 2019 Поделиться Опубликовано 1 Октября 2019 @Kirgudu, ты не понял, это всё мне уже @naxac выше подсказал, это всё готово уже - нахожнение веретексов вокруг ГГ, в итоге я знаю веретексы вокруг ГГ и их координаты, но не знаю как получить game_vertex - для level вертекс, ну я не знаю как ещё объяснить. Вот я ж выше писал: local sobj = alife():create( "space_restrictor", ЭТО ЕСТЬ, ЭТО ЕСТЬ, ЭТО КАК УЗНАТЬ??? ) Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий
Kirgudu 1 255 Опубликовано 1 Октября 2019 Поделиться Опубликовано 1 Октября 2019 (изменено) 5 часов назад, Graff46 сказал: можно ли скриптово без использования патч поинтов заставить НПС ходить в оффлайне и на другие локации? В пределах локации можно и проще, по координатам - npc:set_dest_level_vertex_id(lvid) Для перемещения же на другие локации вроде надо работать с привязкой НПС к смартам. Что-то подобное обсуждали давно здесь. @Баба ЯГА, я-то всё прекрасно понял, а тебе все необходимые подсказки уже дали. У тебя есть level-вертекс и его координаты. Для поиска game-вертекса можно воспользоваться перебором, аналогичным тому, который предложил @naxac для level-вертексов. Например: Скрытый текст function get_gvid_by_pos(pos) local gmg, vpos, n = game_graph(), vector(), 0 for i = gvid_min, gvid_max do -- gvid_min, gvid_max - минимальный и максимальный game-вертексы для данной локации vpos = gmg:vertex(i):level_point() if vpos and vpos:distance_to_sqr(pos) < 9 then n = n + 1 log(i) end end log("found %s game vertexes", n) end Изменено 1 Октября 2019 пользователем Kirgudu Инструмент Ссылка на комментарий
Баба ЯГА 7 Опубликовано 1 Октября 2019 Поделиться Опубликовано 1 Октября 2019 (изменено) @Kirgudu, попробую объяснить ещё раз что мне нужно, курил я твой код никуда его не смог прикрутить... Итак: 1) перебираю вокруг ГГ все вертексы в радиусе 20 метров 2) заношу их в таблицу вида = id вертекса, координаты вертекса 3) спавню пустые рестрикторы по координатам найденных вертексов и на них ставлю метки. НО. чтобы заспавнить рестриктор, мне нужен ГЕЙМ ВЕРТЕКС, вот ты перебираешь гейм вертексы. а как мне определить к какому ЛЕВЕЛ вертексу подходит ГЕЙМ вертекс которые ты перебираешь? Ещё не понял? Ну нашёл я в радиусе 20 метров по твоему скрипту 4 гейм вертекса и что мне с ними делать? У меня таблица, в ней, для примера: t = { 30087 = { -120.00,-18.00,-200.00 } } вот из твоего скрипта нашло 4 гейм вертекса = 47, 22,17,44 - и как мне узнать какой именно ГЕЙМ ВЕРТЕКС нужен для спавна -> 30087 = { -120.00,-18.00,-200.00 }? t = { 30087 = { -120.00,-18.00,-200.00 } } вот мне нужно заспавнить рестриктор: local sobj = alife():create( "space_restrictor", 30087, -120.00,-18.00,-200.00 , а сюда какой из твоих геймвертексов ставить??? их четыре - какой сюда? ) @Kirgudu ??? 5 часов назад, Kirgudu сказал: for i = gvid_min, gvid_max do -- gvid_min, gvid_max - минимальный и максимальный game-вертексы для данной локации И откуда мне знать какой минимальный гейм вертекс на локации вертекс а какой максимальный. Изменено 1 Октября 2019 пользователем W.A.S.P. красный цвет Добавлено Опричник, 1 Октября 2019 Правила форума, п. 2.3 (красный цвет в постах) Предупреждение. Мы, вчера, соседям сказали, что материализация - состоялась, чтобы ваш авторитет не уронить. Вот, мол, было изваяние, а теперь - стала Марья Ивановна. Многие верят ... © Ссылка на комментарий
Kirgudu 1 255 Опубликовано 1 Октября 2019 Поделиться Опубликовано 1 Октября 2019 @Баба ЯГА, полегче, полегче. Красным цветом и прописными буквами пиши в другом месте. Надо разжевать и в рот положить, да? Извини, не по адресу обратился. Предпочитаю дать пищу для самостоятельных размышлений, хотя бы минимальных. 47 минут назад, Баба ЯГА сказал: Ну нашёл я в радиусе 20 метров по твоему скрипту 4 гейм вертекса и что мне с ними делать? Например, модифицировать функцию так, чтобы сразу искала единственный гейм-вертекс, находящийся на минимальном расстоянии от твоих координат, а не все вертексы в радиусе 9 метров. 52 минуты назад, Баба ЯГА сказал: И откуда мне знать какой минимальный гейм вертекс на локации вертекс а какой максимальный. 8 часов назад, Kirgudu сказал: обрати внимание на модуль lua_helper. В нём есть уже готовые функции как для поиска минимальных и максимальных game- и level-вертексов на локации, так и для определения ближайшего вертекса к заданным координатам ( а также куча других полезных функций) Инструмент Ссылка на комментарий
_Sk8_AsTeR_ 122 Опубликовано 11 Октября 2019 Поделиться Опубликовано 11 Октября 2019 Времени доброго! А подскажите пожалуйста, куда ковырнуть, чтобы навыки по обходу аномалий у NPC откорректировать? Только я в них влетаю, ни одного трупа НПС от аномалий :| Ссылка на комментарий
Graff46 598 Опубликовано 12 Октября 2019 Поделиться Опубликовано 12 Октября 2019 @_Sk8_AsTeR_, Сталкеры обходят аномалии.Автор: Red75 СКАЧАТЬ: https://yadi.sk/d/9RfY4v5QsfEAn 1 2 Ссылка на комментарий
gam 117 Опубликовано 12 Октября 2019 Поделиться Опубликовано 12 Октября 2019 @Graff46, Совсем не лишне бы было указать версию/патч, и допустим с Кругловым могут возникнуть неполадки (правится), да и зомбарям как нить отрезать (бреду себе). Ссылка на комментарий
_Sk8_AsTeR_ 122 Опубликовано 12 Октября 2019 Поделиться Опубликовано 12 Октября 2019 @Graff46, а в солянке та же схема интегрирована от товарища Ред? Просто поведение НПС несколько отличается - соляночной от этого мода. В солянке НПС плавно обходят аномалии, а в моде они начинают впадать в режим "готов стрелять" и с пушкой в руках оббегают аномалию по маленькому шагу, выглядит очень странно Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти