бег по ближайшим 3д текстам и нажатие альта

FakeSince

Активный
Автор темы
243
56
Версия MoonLoader
.026-beta
наговнокодил вот этот код ниже, трабл в чем:
первый раз бот прибегает отлично, делает то что нужно, но после того как нажал альт - не ищет следующую метку, и не бежит на нее (иногда ищет и бежит), не понимаю из-за чего это, подскажите плз
Lua:
local sampev = require('lib.samp.events')
local waiting = false
local metka = {}
function main()
    while not isSampAvailable() do wait(0) end
       
    sampRegisterChatCommand('act', function() activated = not activated end)
    while true do
        wait(0)
        print(waiting)
        if activated then
            if not waiting then
                local result, text, position, distance = GetNearest3DText('Собрать', nil)
                if result then
                    wait(2000)
                    print(text)
                    print(position[1]) -- x
                    print(position[2]) -- y
                    print(position[3]) -- z
                    print(distance)
                    clearCharTasksImmediately(PLAYER_PED) setPlayerControl(playerHandle,1) freezeCharPosition(PLAYER_PED,false) restoreCamera()
                    runToPoint(position[1], position[2])
                    waiting = true
                end
                if not result then
                    local result2, text, position, distance = GetNearest3DText('Сложить', nil)
                    if result2 then
                        wait(2000)
                        print(text)
                        print(position[1]) -- x
                        print(position[2]) -- y
                        print(position[3]) -- z
                        print(distance)
                        clearCharTasksImmediately(PLAYER_PED) setPlayerControl(playerHandle,1) freezeCharPosition(PLAYER_PED,false) restoreCamera()
                        runToPoint(position[1], position[2])
                        waiting = true
                    end
                end
            end
        end
    end
end
local array = {}
function GetNearest3DText(search, ignore)
    for i = 0, 2049 do
        if sampIs3dTextDefined(i) then
            local text, color, x, y, z, distance, ignoreWalls, playerId, vehicleId = sampGet3dTextInfoById(i)
            local myX, myY, myZ = getCharCoordinates(PLAYER_PED)
            local distance = getDistanceBetweenCoords3d(myX, myY, myZ, x, y, z)
            if text:find(search) then
                if ignore then
                    if not text:find(ignore) then
                        if distance < 10 then
                            table.insert(array, {['text'] = text, ['position'] = {x, y, z}, ['distance'] = distance})
                        end
                    end
                end
            end
        end
    end
    if #array >= 1 then
        table.sort( array, function(a, b) return (a.distance < b.distance) end)
        return true, array[1].text, array[1].position, array[1].distance
    end
    return false
end
function runToPoint(tox, toy)
    lua_thread.create(function()
        wait(3000)
        local x, y, z = getCharCoordinates(PLAYER_PED)
        local angle = getHeadingFromVector2d(tox - x, toy - y)
        local xAngle = math.random(-50, 50)/100
        setCameraPositionUnfixed(xAngle, math.rad(angle - 90))
        stopRun = false
        while getDistanceBetweenCoords2d(x, y, tox, toy) > 0.8 do
            setGameKeyState(1, -255)
            setGameKeyState(16, 1)
            wait(1)
            x, y, z = getCharCoordinates(PLAYER_PED)
            angle = getHeadingFromVector2d(tox - x, toy - y)
            setCameraPositionUnfixed(xAngle, math.rad(angle - 90))
            if stopRun then
                stopRun = false
                break
            end
        end
        setCharCoordinates(1, tox, toy, z-1)
        wait(1000)
        setGameKeyState(21, 255)
        wait(100)
        setGameKeyState(21, 0)
        wait(4000)
        waiting = false
    end)
end
UPD: Выяснил ошибку, она заключалась в функции GetNearest3DText, которая даже после того как 3dtext на координатах был изменен, все равно выдавала те же координаты, и бот делал лишние и непонятные движения. Вопрос таков: как можно заменить эту функцию, чем?
 
Последнее редактирование: