Перейти к контенту

Рекомендуемые сообщения

@FonSwong

Таблицы, функции, потоки и пользовательские данные (userdata) - это объекты: переменные фактически не содержат их значений, только ссылки на них. Присвоение, передача параметров и возврат из функций всегда манипулируют ссылками на эти значения; эти операции не подразумевают никакого типа копирования. 

Вот тут:

ignore_tbl[back_level] = point_tbl
ты создаешь ещё одну ссылку(имя) на таблицу(объект) с именем point_tbl.
Таких ссылок(имен) может быть множество, а объект один и тот же.

Изменено пользователем Nazgool
  • Полезно 1
Ссылка на комментарий

@Nazgool, как мне сделать дубликат, не привязанный к point_tbl?

Неужели каждое вложение перебирать и переписывать? :unsure:

Изменено пользователем FonSwong
Ссылка на комментарий

db.actor:position() - что из себя представляет? X,Y,Z,Gv,Lv - я правильно понял?

Если я передаю в функцию позицую, а она (функция) не поддерживает передачу каждой координаты отдельно, мне нужно разбить мою позицию на составляющие, кое что с ними сделать... А как потом передать в функцию? Как их упаковать так сказать, чтобы исходный формат был как и у оригинала...

Надеюсь понятно обьяснил...

Не соответствует правилам.

Ссылка на комментарий

Неужели каждое вложение перебирать и переписывать?

Именно. С автоматической рекурсией по вложенным таблицам. :)

  • Полезно 1
Ссылка на комментарий

@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]) 

Изменено пользователем FonSwong
Ссылка на комментарий

FonSwong, извиняюсь, но это тихий ужас. К сожалению, пишу с телефона; если раньше никто не напишет, расширю своё сообщение завтра.

  • Согласен 3
Ссылка на комментарий

@FonSwong, хоть я и немного понимаю в Lua, но что ЭТО мне даст - ахах непонятно :P

СЛОЖНА. НИПАНЯТНА

И что этот скрипт будет возвращать? Про то, что такое my_func - умолчу...

Хотя если расскажешь - как это работает - будет классно!

Не соответствует правилам.

Ссылка на комментарий
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

А касательно вопроса "что это". Мне самому стало интересно. Видимо вектор? Поправьте если не прав  :)  всегда использовал и не задумывался как-то.

Изменено пользователем Kondr48
  • Спасибо 1
Ссылка на комментарий

@Kirgudu, первое что в голову пришло :D

Если честн, то и конкретно что нужно было не понял <_<

Изменено пользователем FonSwong
Ссылка на комментарий

@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 )

Изменено пользователем naxac
  • Спасибо 1
  • Согласен 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

Ссылка на комментарий

Видел ли кто скрипт, который бы умел высчитывать кратчайший путь от А до Б, в n-ом кол-ве точек, где сами точки и переходы между которыми заранее известны(т.е. какие точки связаны)?

Ссылка на комментарий

Видел ли кто скрипт, который бы умел высчитывать кратчайший путь от А до Б, в 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
Или в крайнем случае поиск в ширину. Изменено пользователем abramcumner
Ссылка на комментарий

@abramcumner, сам-то я написал корявенько, от Старта до Финиша находит дорогу, а вот дальше, чтобы он проверил все уникальные возможные пути и сравнил их - не получается, зацикливается гад

(записывается текущие пройденные точки, запрещается ходить на любую точку из уже пройденных, при тупике возвращается назад, после возврата/после нахождения Финиша запоминается путь к тупику/Финишу дабы искал только уникальные пути(чтобы в тупик по тому же пути не смог зайти, но если путь отличается чтобы мог попробовать пройти иным способом)) но что-то не получается...

Изменено пользователем FonSwong
Ссылка на комментарий

Вернусь к своей проблеме. 

Я рисую партикл ТОЧНО по координатам игрока. Сам партикл - снежная завеса. И вот что имеем в итоге:

http://hostingkartinok.com/show-image.php?id=502b265350a69f9b32673fcf7a6a4cd0

Партикл рисуеться совсем не там, точне сказать - он сделан по другому...

 

А задача такова - что нужно правильно преобразовать координаты для ГГ, т.е прибавить(убавить) значения к X Y Z так, чтобы ГГ оказался в центре этой все завесы.

Рабочую функцию для преобразования координат уже привел @Kondr48 выше. Сам, сколько не вертелся, то снег выше, то ниже, то снова не там, хотя я представляю, как устроен 3д мир... Но что-то пока не выходит...

Не соответствует правилам.

Ссылка на комментарий

@CRAZY_STALKER666, пробуй играть от кости, от центра, все попробуй. У других же работает. Брать тут вектор позиции на мой взгляд не совсем верно.

Ссылка на комментарий

@CRAZY_STALKER666, Если ничего не получиться, тогда просто сними координаты ГГ и в демо рекорде+rs_stats координаты снега и посчитай разницу. А при спавне будешь делать эту поправку.

  • Спасибо 1
Ссылка на комментарий

@TIGER_VLAD? А как? Снег же не спавном ему нужен, я думаю, а апдейдить прям на ГГ, под погоду, я так думаю. Потому не пойму, где он будет указывать разницу. Тут надо переделывать партиклы и смещать партиклы в ту сторону, где нет партиклов.

Изменено пользователем Дизель

andreyholkin.gif

rod_cccp.gif

 

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...