• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Lua Get positions between two positions

This is funny I was looking through the lib folder of an 8.6 server and thought I click on functions but instead I clicked on position.
So here is the file :)
Code:
function isInRange(position, fromPosition, toPosition)
    return (position.x >= fromPosition.x and position.y >= fromPosition.y and position.z >= fromPosition.z and position.x <= toPosition.x and position.y <= toPosition.y and position.z <= toPosition.z)
end

function getDistanceBetween(fromPosition, toPosition)
    local x, y = math.abs(fromPosition.x - toPosition.x), math.abs(fromPosition.y - toPosition.y)
    local diff = math.max(x, y)
    if(fromPosition.z ~= toPosition.z) then
        diff = diff + 9 + 6
    end

    return diff
end

function getDirectionTo(pos1, pos2)
    local dir = NORTH
    if(pos1.x > pos2.x) then
        dir = WEST
        if(pos1.y > pos2.y) then
            dir = NORTHWEST
        elseif(pos1.y < pos2.y) then
            dir = SOUTHWEST
        end
    elseif(pos1.x < pos2.x) then
        dir = EAST
        if(pos1.y > pos2.y) then
            dir = NORTHEAST
        elseif(pos1.y < pos2.y) then
            dir = SOUTHEAST
        end
    else
        if(pos1.y > pos2.y) then
            dir = NORTH
        elseif(pos1.y < pos2.y) then
            dir = SOUTH
        end
    end

    return dir
end

function getCreatureLookPosition(cid)
    return getPosByDir(getThingPos(cid), getCreatureLookDirection(cid))
end

function getPositionByDirection(position, direction, size)
    local n = size or 1
    if(direction == NORTH) then
        position.y = position.y - n
    elseif(direction == SOUTH) then
        position.y = position.y + n
    elseif(direction == WEST) then
        position.x = position.x - n
    elseif(direction == EAST) then
        position.x = position.x + n
    elseif(direction == NORTHWEST) then
        position.y = position.y - n
        position.x = position.x - n
    elseif(direction == NORTHEAST) then
        position.y = position.y - n
        position.x = position.x + n
    elseif(direction == SOUTHWEST) then
        position.y = position.y + n
        position.x = position.x - n
    elseif(direction == SOUTHEAST) then
        position.y = position.y + n
        position.x = position.x + n
    end

    return position
end

function doComparePositions(position, positionEx)
    return position.x == positionEx.x and position.y == positionEx.y and position.z == positionEx.z
end

function getArea(position, x, y)
    local t = {}
    for i = (position.x - x), (position.x + x) do
        for j = (position.y - y), (position.y + y) do
            table.insert(t, {x = i, y = j, z = position.z})
        end
    end

    return t
end
 
This should do it.
Code:
function getPositionsBetween(startPos, endPos)
    local curPos = startPos
    local positions = {}

    while(true) do
        local dx = curPos.x - endPos.x
        local dy = curPos.y - endPos.y
      
        if dx == 0 and dy == 0 then
            break
        end
      
        if math.abs(dx) > math.abs(dy) then
            if dx < 0 then
                curPos.x = curPos.x + 1
            else
                curPos.x = curPos.x - 1
            end
        else
            if dy < 0 then
                curPos.y = curPos.y + 1
            else
                curPos.y = curPos.y - 1
            end
        end
      
        table.insert(positions, curPos)
    end
  
    return positions
end
 
Last edited:
How do I get to an array of positions from one position to the other?

Many Thanks

People need to know which server version you are using if you want the correct help, although I'm sure jotran guessed correctly. .. but that's the rules, please read them and follow them if you want support in the future...
 
Sorry my mistake, I'm using TFS Version 1.0 with the version of Tibia 10.41

@Acedayz
Wonder, I will not be able to test now, but from what I read above is to function properly, Thanks
 
Last edited:
Back
Top