Сортировка

Neil_

Известный
Автор темы
204
32
Версия MoonLoader
Другое
Как сделать чтобы брало из полученного списка координат ближайшие к игроку?

Lua:
function cust()
    for id = 0,2048 do
        if sampIs3dTextDefined(id) then
            text, color, posX, posY, posZ, distance, ignoreWalls, playerId, vehicleId = sampGet3dTextInfoById(id)
            if text:find('Чтобы сорвать куст%.') then
                x,y,z = getCharCoordinates(PLAYER_PED)
                dist = getDistanceBetweenCoords3d(x,y,z,posX,posY,posZ)
            end
        end
    end
end
 
Решение
Работает, но мне нужно координаты ближайшие, x,y,z
Значит добавляй в тот же массив при помощи table.insert
должно получится что-то типо
{dist = 15, posx = 1235, posz = 1555, posy = 69} где
15 - Дистанция
1235 - X
1555 - Z
69 - Y
Опять же сортируешь просто по array[1][1] array[2][1] и т.д

В итоге получаем:
code:
function cust()
    local distanceList = {}
    for id = 0,2048 do
        if sampIs3dTextDefined(id) then
            text, color, posX, posY, posZ, distance, ignoreWalls, playerId, vehicleId = sampGet3dTextInfoById(id)
            if text:find('Чтобы сорвать куст%.') then
                x,y,z = getCharCoordinates(PLAYER_PED)
                table.insert(distanceList, {distanceList[#distanceList + 1], posX, posZ, posY})...

neverlessy

Потрачен
170
120
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Должно работать

code:
function cust()
    local distanceList = {}
    for id = 0,2048 do
        if sampIs3dTextDefined(id) then
            text, color, posX, posY, posZ, distance, ignoreWalls, playerId, vehicleId = sampGet3dTextInfoById(id)
            if text:find('Чтобы сорвать куст%.') then
                x,y,z = getCharCoordinates(PLAYER_PED)
                distanceList[#distanceList + 1] = getDistanceBetweenCoords3d(x,y,z,posX,posY,posZ)
            end
        end
    end
    table.sort(distanceList)  -- По ключу distanceList[1] у тебя будет минимальная дистанция
end
 

Neil_

Известный
Автор темы
204
32
Должно работать

code:
function cust()
    local distanceList = {}
    for id = 0,2048 do
        if sampIs3dTextDefined(id) then
            text, color, posX, posY, posZ, distance, ignoreWalls, playerId, vehicleId = sampGet3dTextInfoById(id)
            if text:find('Чтобы сорвать куст%.') then
                x,y,z = getCharCoordinates(PLAYER_PED)
                distanceList[#distanceList + 1] = getDistanceBetweenCoords3d(x,y,z,posX,posY,posZ)
            end
        end
    end
    table.sort(distanceList)  -- По ключу distanceList[1] у тебя будет минимальная дистанция
end
Работает, но мне нужно координаты ближайшие, x,y,z

Работает, но мне нужно координаты ближайшие, x,y,z
Всё разобрался

Работает, но мне нужно координаты ближайшие, x,y,z


Всё разобрался
Нет не разобрался
 
Последнее редактирование:

neverlessy

Потрачен
170
120
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Работает, но мне нужно координаты ближайшие, x,y,z
Значит добавляй в тот же массив при помощи table.insert
должно получится что-то типо
{dist = 15, posx = 1235, posz = 1555, posy = 69} где
15 - Дистанция
1235 - X
1555 - Z
69 - Y
Опять же сортируешь просто по array[1][1] array[2][1] и т.д

В итоге получаем:
code:
function cust()
    local distanceList = {}
    for id = 0,2048 do
        if sampIs3dTextDefined(id) then
            text, color, posX, posY, posZ, distance, ignoreWalls, playerId, vehicleId = sampGet3dTextInfoById(id)
            if text:find('Чтобы сорвать куст%.') then
                x,y,z = getCharCoordinates(PLAYER_PED)
                table.insert(distanceList, {distanceList[#distanceList + 1], posX, posZ, posY})
            end
        end
    end
    table.sort(distanceList, function( a, b ) return a[2] > b[2] end ) -- Последний элемент массива будет с самой малой дистанцией
end

Надеюсь ответ исчерпывающий, все проверено:
 

Вложения

  • UhQWepp.png
    UhQWepp.png
    43.6 KB · Просмотры: 35