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 Ссылка на комментарий
Nazgool 250 Опубликовано 18 Августа 2016 Поделиться Опубликовано 18 Августа 2016 (изменено) @FonSwong, Таблицы, функции, потоки и пользовательские данные (userdata) - это объекты: переменные фактически не содержат их значений, только ссылки на них. Присвоение, передача параметров и возврат из функций всегда манипулируют ссылками на эти значения; эти операции не подразумевают никакого типа копирования. Вот тут: ignore_tbl[back_level] = point_tblты создаешь ещё одну ссылку(имя) на таблицу(объект) с именем point_tbl.Таких ссылок(имен) может быть множество, а объект один и тот же. Изменено 18 Августа 2016 пользователем Nazgool 1 Ссылка на комментарий
FonSwong 33 Опубликовано 18 Августа 2016 Поделиться Опубликовано 18 Августа 2016 (изменено) @Nazgool, как мне сделать дубликат, не привязанный к point_tbl? Неужели каждое вложение перебирать и переписывать? Изменено 18 Августа 2016 пользователем FonSwong Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 18 Августа 2016 Поделиться Опубликовано 18 Августа 2016 db.actor:position() - что из себя представляет? X,Y,Z,Gv,Lv - я правильно понял? Если я передаю в функцию позицую, а она (функция) не поддерживает передачу каждой координаты отдельно, мне нужно разбить мою позицию на составляющие, кое что с ними сделать... А как потом передать в функцию? Как их упаковать так сказать, чтобы исходный формат был как и у оригинала... Надеюсь понятно обьяснил... Не соответствует правилам. Ссылка на комментарий
Kirgudu 1 264 Опубликовано 18 Августа 2016 Поделиться Опубликовано 18 Августа 2016 Неужели каждое вложение перебирать и переписывать? Именно. С автоматической рекурсией по вложенным таблицам. 1 Инструмент Ссылка на комментарий
FonSwong 33 Опубликовано 18 Августа 2016 Поделиться Опубликовано 18 Августа 2016 (изменено) @CRAZY_STALKER666, Можно так: local x, y, z = db.actor:position() local temp_str = x..','..y..','..z local substr, zap2 local temp_tbl = {} local i = 0 while true do i = i + 1 zap2 = string.find(temp_str,",") -- индекс 1 запятой if zap2 == nil or i > 2 then table.insert(temp_tbl, temp_str) break end substr = string.sub(temp_str, 1, zap2 - 1) -- !строка от 1 знака до (1 запятой - 1) temp_str= string.sub(temp_str, zap2 + 1) -- строка от (1 запятой + 1) до конца table.insert(temp_tbl, substr) end my_func(temp_tbl[1], temp_tbl[2], temp_tbl[3]) local x, y, z = db.actor:position() local temp_str = x..','..y..','..z local temp_tbl = {} local i = 0 while true do i = i + 1 if zap2 == nil or i > 2 then table.insert(temp_tbl, temp_str) break end table.insert(string.sub(temp_str, string.find(temp_str,",") + 1), string.sub(temp_str, 1, string.find(temp_str,",") - 1)) end my_func(temp_tbl[1], temp_tbl[2], temp_tbl[3]) Изменено 18 Августа 2016 пользователем FonSwong Ссылка на комментарий
Kirgudu 1 264 Опубликовано 18 Августа 2016 Поделиться Опубликовано 18 Августа 2016 FonSwong, извиняюсь, но это тихий ужас. К сожалению, пишу с телефона; если раньше никто не напишет, расширю своё сообщение завтра. 3 Инструмент Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 18 Августа 2016 Поделиться Опубликовано 18 Августа 2016 @FonSwong, хоть я и немного понимаю в Lua, но что ЭТО мне даст - ахах непонятно СЛОЖНА. НИПАНЯТНА И что этот скрипт будет возвращать? Про то, что такое my_func - умолчу... Хотя если расскажешь - как это работает - будет классно! Не соответствует правилам. Ссылка на комментарий
TIGER_VLAD 361 Опубликовано 18 Августа 2016 Поделиться Опубликовано 18 Августа 2016 @FonSwong, АААА... зачем же так сложнаа?)))Только запутаешь товарища. Ссылка на комментарий
Kondr48 314 Опубликовано 18 Августа 2016 Поделиться Опубликовано 18 Августа 2016 (изменено) CRAZY_STALKER666, не совсем так - db.actor:position() хранит только координаты, вертексы актора получают так: db.actor:level_vertex_id(), db.actor:game_vertex_id(). Что касается того, как разделить и передать, мб вот так? fucntion edit_actor_pos() local position = db.actor:position() local x = position.x + Ваша величина local y = position.y + Ваша величина local z = position.z + Ваша величина local position_new = vector():set(x,y,z) ваш_скрипт_куда_передать.ваша_функция(position_new) end А касательно вопроса "что это". Мне самому стало интересно. Видимо вектор? Поправьте если не прав всегда использовал и не задумывался как-то. Изменено 18 Августа 2016 пользователем Kondr48 1 Ссылка на комментарий
FonSwong 33 Опубликовано 19 Августа 2016 Поделиться Опубликовано 19 Августа 2016 (изменено) @Kirgudu, первое что в голову пришло Если честн, то и конкретно что нужно было не понял Изменено 19 Августа 2016 пользователем FonSwong Ссылка на комментарий
naxac 2 477 Опубликовано 19 Августа 2016 Поделиться Опубликовано 19 Августа 2016 (изменено) @CRAZY_STALKER666, метод position класса game_object возвращает экземпляр класса vector, в котором содержaтся текущие координаты объекта. Что тебе надo перепаковывать и зачем? Передавай как есть. local pos = db.actor:position() func ( pos ) Если надо что-то сделать с координатами, то используй методы класса vector - правда, для этого хотя бы немного надо векторную алгебру знать. Можно костыльно: local x,y,z = pos.x,pos.y,pos.z -- тут что-то делаешь со значениями... pos = vector():set(x,y,z) func ( pos ) Изменено 19 Августа 2016 пользователем naxac 1 1 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
FonSwong 33 Опубликовано 19 Августа 2016 Поделиться Опубликовано 19 Августа 2016 Видел ли кто скрипт, который бы умел высчитывать кратчайший путь от А до Б, в n-ом кол-ве точек, где сами точки и переходы между которыми заранее известны(т.е. какие точки связаны)? Ссылка на комментарий
abramcumner 1 181 Опубликовано 19 Августа 2016 Поделиться Опубликовано 19 Августа 2016 (изменено) Видел ли кто скрипт, который бы умел высчитывать кратчайший путь от А до Б, в n-ом кол-ве точек, где сами точки и переходы между которыми заранее известны(т.е. какие точки связаны)?Тысячи их. Гуглишь "a-star search lua" и выбираешь понравившийся. А хочешь сам напиши - алгоритм простейший(псевдокод с вики): function A*(start, goal, f) % множество уже пройденных вершин var closed := the empty set % множество частных решений var open := make_queue(f) enqueue(open, path(start)) while open is not empty var p := remove_first(open) var x := the last node of p if x in closed continue if x = goal return p add(closed, x) % добавляем смежные вершины foreach y in successors(x) enqueue(open, add_to_path(p, y)) return failure Или в крайнем случае поиск в ширину. Изменено 19 Августа 2016 пользователем abramcumner Ссылка на комментарий
FonSwong 33 Опубликовано 19 Августа 2016 Поделиться Опубликовано 19 Августа 2016 (изменено) @abramcumner, сам-то я написал корявенько, от Старта до Финиша находит дорогу, а вот дальше, чтобы он проверил все уникальные возможные пути и сравнил их - не получается, зацикливается гад (записывается текущие пройденные точки, запрещается ходить на любую точку из уже пройденных, при тупике возвращается назад, после возврата/после нахождения Финиша запоминается путь к тупику/Финишу дабы искал только уникальные пути(чтобы в тупик по тому же пути не смог зайти, но если путь отличается чтобы мог попробовать пройти иным способом)) но что-то не получается... Изменено 19 Августа 2016 пользователем FonSwong Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 19 Августа 2016 Поделиться Опубликовано 19 Августа 2016 Вернусь к своей проблеме. Я рисую партикл ТОЧНО по координатам игрока. Сам партикл - снежная завеса. И вот что имеем в итоге: http://hostingkartinok.com/show-image.php?id=502b265350a69f9b32673fcf7a6a4cd0 Партикл рисуеться совсем не там, точне сказать - он сделан по другому... А задача такова - что нужно правильно преобразовать координаты для ГГ, т.е прибавить(убавить) значения к X Y Z так, чтобы ГГ оказался в центре этой все завесы. Рабочую функцию для преобразования координат уже привел @Kondr48 выше. Сам, сколько не вертелся, то снег выше, то ниже, то снова не там, хотя я представляю, как устроен 3д мир... Но что-то пока не выходит... Не соответствует правилам. Ссылка на комментарий
TIGER_VLAD 361 Опубликовано 19 Августа 2016 Поделиться Опубликовано 19 Августа 2016 @CRAZY_STALKER666, Я думаю ты помнишь, что высота в сталкере - это Y, а не Z. Может в этом ошибка. Ссылка на комментарий
CRAZY_STALKER666 36 Опубликовано 19 Августа 2016 Поделиться Опубликовано 19 Августа 2016 высота в сталкере - это Y, а не Z Помню. Но все равно, где-то ошибочки всегда... Не соответствует правилам. Ссылка на комментарий
Карлан 1 049 Опубликовано 19 Августа 2016 Поделиться Опубликовано 19 Августа 2016 @CRAZY_STALKER666, пробуй играть от кости, от центра, все попробуй. У других же работает. Брать тут вектор позиции на мой взгляд не совсем верно. Ссылка на комментарий
TIGER_VLAD 361 Опубликовано 19 Августа 2016 Поделиться Опубликовано 19 Августа 2016 @CRAZY_STALKER666, Если ничего не получиться, тогда просто сними координаты ГГ и в демо рекорде+rs_stats координаты снега и посчитай разницу. А при спавне будешь делать эту поправку. 1 Ссылка на комментарий
Expropriator 2 119 Опубликовано 19 Августа 2016 Поделиться Опубликовано 19 Августа 2016 (изменено) @TIGER_VLAD? А как? Снег же не спавном ему нужен, я думаю, а апдейдить прям на ГГ, под погоду, я так думаю. Потому не пойму, где он будет указывать разницу. Тут надо переделывать партиклы и смещать партиклы в ту сторону, где нет партиклов. Изменено 19 Августа 2016 пользователем Дизель Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти