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/
Nazgool 251 Опубликовано 18 Августа 2016 Поделиться Опубликовано 18 Августа 2016 (изменено) @FonSwong, Таблицы, функции, потоки и пользовательские данные (userdata) - это объекты: переменные фактически не содержат их значений, только ссылки на них. Присвоение, передача параметров и возврат из функций всегда манипулируют ссылками на эти значения; эти операции не подразумевают никакого типа копирования. Вот тут: ignore_tbl[back_level] = point_tblты создаешь ещё одну ссылку(имя) на таблицу(объект) с именем point_tbl.Таких ссылок(имен) может быть множество, а объект один и тот же. Изменено 18 Августа 2016 пользователем Nazgool 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/392/#findComment-1032948
FonSwong 33 Опубликовано 18 Августа 2016 Поделиться Опубликовано 18 Августа 2016 (изменено) @Nazgool, как мне сделать дубликат, не привязанный к point_tbl? Неужели каждое вложение перебирать и переписывать? Изменено 18 Августа 2016 пользователем FonSwong Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/392/#findComment-1032956
CRAZY_STALKER666 36 Опубликовано 18 Августа 2016 Поделиться Опубликовано 18 Августа 2016 db.actor:position() - что из себя представляет? X,Y,Z,Gv,Lv - я правильно понял? Если я передаю в функцию позицую, а она (функция) не поддерживает передачу каждой координаты отдельно, мне нужно разбить мою позицию на составляющие, кое что с ними сделать... А как потом передать в функцию? Как их упаковать так сказать, чтобы исходный формат был как и у оригинала... Надеюсь понятно обьяснил... Не соответствует правилам. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/392/#findComment-1032966
Kirgudu 1 339 Опубликовано 18 Августа 2016 Поделиться Опубликовано 18 Августа 2016 Неужели каждое вложение перебирать и переписывать? Именно. С автоматической рекурсией по вложенным таблицам. 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/392/#findComment-1032967
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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/392/#findComment-1032968
Kirgudu 1 339 Опубликовано 18 Августа 2016 Поделиться Опубликовано 18 Августа 2016 FonSwong, извиняюсь, но это тихий ужас. К сожалению, пишу с телефона; если раньше никто не напишет, расширю своё сообщение завтра. 3 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/392/#findComment-1032969
CRAZY_STALKER666 36 Опубликовано 18 Августа 2016 Поделиться Опубликовано 18 Августа 2016 @FonSwong, хоть я и немного понимаю в Lua, но что ЭТО мне даст - ахах непонятно СЛОЖНА. НИПАНЯТНА И что этот скрипт будет возвращать? Про то, что такое my_func - умолчу... Хотя если расскажешь - как это работает - будет классно! Не соответствует правилам. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/392/#findComment-1032970
TIGER_VLAD 361 Опубликовано 18 Августа 2016 Поделиться Опубликовано 18 Августа 2016 @FonSwong, АААА... зачем же так сложнаа?)))Только запутаешь товарища. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/392/#findComment-1032971
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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/392/#findComment-1032974
FonSwong 33 Опубликовано 19 Августа 2016 Поделиться Опубликовано 19 Августа 2016 (изменено) @Kirgudu, первое что в голову пришло Если честн, то и конкретно что нужно было не понял Изменено 19 Августа 2016 пользователем FonSwong Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/392/#findComment-1032979
naxac 2 594 Опубликовано 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/Тема на AP-PRO Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/392/#findComment-1032980
FonSwong 33 Опубликовано 19 Августа 2016 Поделиться Опубликовано 19 Августа 2016 Видел ли кто скрипт, который бы умел высчитывать кратчайший путь от А до Б, в n-ом кол-ве точек, где сами точки и переходы между которыми заранее известны(т.е. какие точки связаны)? Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/392/#findComment-1033008
abramcumner 1 229 Опубликовано 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 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/392/#findComment-1033020
FonSwong 33 Опубликовано 19 Августа 2016 Поделиться Опубликовано 19 Августа 2016 (изменено) @abramcumner, сам-то я написал корявенько, от Старта до Финиша находит дорогу, а вот дальше, чтобы он проверил все уникальные возможные пути и сравнил их - не получается, зацикливается гад (записывается текущие пройденные точки, запрещается ходить на любую точку из уже пройденных, при тупике возвращается назад, после возврата/после нахождения Финиша запоминается путь к тупику/Финишу дабы искал только уникальные пути(чтобы в тупик по тому же пути не смог зайти, но если путь отличается чтобы мог попробовать пройти иным способом)) но что-то не получается... Изменено 19 Августа 2016 пользователем FonSwong Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/392/#findComment-1033026
CRAZY_STALKER666 36 Опубликовано 19 Августа 2016 Поделиться Опубликовано 19 Августа 2016 Вернусь к своей проблеме. Я рисую партикл ТОЧНО по координатам игрока. Сам партикл - снежная завеса. И вот что имеем в итоге: http://hostingkartinok.com/show-image.php?id=502b265350a69f9b32673fcf7a6a4cd0 Партикл рисуеться совсем не там, точне сказать - он сделан по другому... А задача такова - что нужно правильно преобразовать координаты для ГГ, т.е прибавить(убавить) значения к X Y Z так, чтобы ГГ оказался в центре этой все завесы. Рабочую функцию для преобразования координат уже привел @Kondr48 выше. Сам, сколько не вертелся, то снег выше, то ниже, то снова не там, хотя я представляю, как устроен 3д мир... Но что-то пока не выходит... Не соответствует правилам. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/392/#findComment-1033033
TIGER_VLAD 361 Опубликовано 19 Августа 2016 Поделиться Опубликовано 19 Августа 2016 @CRAZY_STALKER666, Я думаю ты помнишь, что высота в сталкере - это Y, а не Z. Может в этом ошибка. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/392/#findComment-1033046
CRAZY_STALKER666 36 Опубликовано 19 Августа 2016 Поделиться Опубликовано 19 Августа 2016 высота в сталкере - это Y, а не Z Помню. Но все равно, где-то ошибочки всегда... Не соответствует правилам. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/392/#findComment-1033048
Карлан 1 050 Опубликовано 19 Августа 2016 Поделиться Опубликовано 19 Августа 2016 @CRAZY_STALKER666, пробуй играть от кости, от центра, все попробуй. У других же работает. Брать тут вектор позиции на мой взгляд не совсем верно. Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/392/#findComment-1033049
TIGER_VLAD 361 Опубликовано 19 Августа 2016 Поделиться Опубликовано 19 Августа 2016 @CRAZY_STALKER666, Если ничего не получиться, тогда просто сними координаты ГГ и в демо рекорде+rs_stats координаты снега и посчитай разницу. А при спавне будешь делать эту поправку. 1 Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/392/#findComment-1033052
Expropriator 2 119 Опубликовано 19 Августа 2016 Поделиться Опубликовано 19 Августа 2016 (изменено) @TIGER_VLAD? А как? Снег же не спавном ему нужен, я думаю, а апдейдить прям на ГГ, под погоду, я так думаю. Потому не пойму, где он будет указывать разницу. Тут надо переделывать партиклы и смещать партиклы в ту сторону, где нет партиклов. Изменено 19 Августа 2016 пользователем Дизель Ссылка на комментарий https://www.amk-team.ru/forum/topic/6185-skriptovanie/page/392/#findComment-1033054
Рекомендуемые сообщения
Пожалуйста, авторизуйтесь, чтобы оставить комментарий
Вы сможете оставлять комментарии после авторизации
Войти