Помощь в коде

Zelensky.

Новичок
Автор темы
7
0
Версия MoonLoader
.026-beta
Нужна небольшая помощь в коде, за основу решил взять дудванский бот для арз, но есть прикол в виде через час показывается текст Вам срочно нужно покушать! Вы очень сильно голодны, поэтому ваше здоровье снижается и хп теряется, пытаюсь провернуть это в бота, но видимо из-за не опыта не могу понять почему выбивает ошибки

advbot (2).lua: D:\Games\samp arz\moonloader\advbot (2).lua:53: attempt to yield across C-call boundary
stack traceback:
[C]: in function 'wait'
D:\Games\samp arz\moonloader\advbot (2).lua:53: in function 'runToPoint'
D:\Games\samp arz\moonloader\advbot (2).lua:24: in function 'callback'
D:\Games\samp arz\moonloader\lib\samp\events\core.lua:79: in function <D:\Games\samp arz\moonloader\lib\samp\events\core.lua:53>
[21:23:11.729111] (error) advbot (2).lua: Script died due to an error. (5D02F7EC)

Код:
botstatus = false
local ev = require('lib.samp.events')
XX, YY, ZZ = 0, 0, 0
function main()
    while not isSampAvailable() do wait(0) end
    
    sampRegisterChatCommand('check', function()
        sampAddChatMessage(": "..XX..', '..YY..', '..ZZ,-1)
    end)
    sampRegisterChatCommand("advbot", function()
         botstatus = not botstatus
    end)
    while true do wait(0)
        
        if botstatus then
            runToPoint(-1844, -1635, 21, true)
            runToPoint(XX,YY,ZZ,true)
            runToPoint(-1854, -1629, 21,false)
            runToPoint(XX,YY,ZZ,false)
            runToPoint(-1854, -1629, 21, true)
            function ev.onServerMessage(color, text)
                if text:find("Вам срочно нужно покушать! Вы очень сильно голодны, поэтому ваше здоровье снижается.") then
                    runToPoint(-1829, -1627, 23, true)
                    sampSendChat("/eat")
                end
            end
            --runToPointt()
        end
        
    end
end



function ev.onSetCheckpoint(pos)
    XX = pos.x
    YY = pos.y
    ZZ = pos.z
end

 function runToPoint(tox, toy, toz, bool)
    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 botstatus and getDistanceBetweenCoords2d(x, y, tox, toy) > 0.8 do
        setGameKeyState(1, -255)
        if bool then
            setGameKeyState(16, 1)
        end
        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
end
 

FixZer

Активный
126
36
Привет, в функции "runToPoint" всего лишь нужно было добавить lua_thread.create()
Ну там в коде увидишь в 42 строке
Lua:
botstatus = false
local ev = require('lib.samp.events')
XX, YY, ZZ = 0, 0, 0
function main()
    while not isSampAvailable() do wait(0) end
   
    sampRegisterChatCommand('check', function()
        sampAddChatMessage(": "..XX..', '..YY..', '..ZZ,-1)
    end)
    sampRegisterChatCommand("advbot", function()
         botstatus = not botstatus
    end)
    while true do wait(0)
       
        if botstatus then
            runToPoint(-1844, -1635, 21, true)
            runToPoint(XX,YY,ZZ,true)
            runToPoint(-1854, -1629, 21,false)
            runToPoint(XX,YY,ZZ,false)
            runToPoint(-1854, -1629, 21, true)
            function ev.onServerMessage(color, text)
                if text:find("Вам срочно нужно покушать! Вы очень сильно голодны, поэтому ваше здоровье снижается.") then
                    runToPoint(-1829, -1627, 23, true)
                    sampSendChat("/eat")
                end
            end
            --runToPointt()
        end
       
    end
end



function ev.onSetCheckpoint(pos)
    XX = pos.x
    YY = pos.y
    ZZ = pos.z
end

 function runToPoint(tox, toy, toz, bool)
    lua_thread.create(function()
        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 botstatus and getDistanceBetweenCoords2d(x, y, tox, toy) > 0.8 do
            setGameKeyState(1, -255)
            if bool then
                setGameKeyState(16, 1)
            end
            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
    end)
end
 
  • Нравится
Реакции: Zelensky.

Zelensky.

Новичок
Автор темы
7
0
Привет, в функции "runToPoint" всего лишь нужно было добавить lua_thread.create()
Ну там в коде увидишь в 42 строке
Lua:
botstatus = false
local ev = require('lib.samp.events')
XX, YY, ZZ = 0, 0, 0
function main()
    while not isSampAvailable() do wait(0) end
 
    sampRegisterChatCommand('check', function()
        sampAddChatMessage(": "..XX..', '..YY..', '..ZZ,-1)
    end)
    sampRegisterChatCommand("advbot", function()
         botstatus = not botstatus
    end)
    while true do wait(0)
     
        if botstatus then
            runToPoint(-1844, -1635, 21, true)
            runToPoint(XX,YY,ZZ,true)
            runToPoint(-1854, -1629, 21,false)
            runToPoint(XX,YY,ZZ,false)
            runToPoint(-1854, -1629, 21, true)
            function ev.onServerMessage(color, text)
                if text:find("Вам срочно нужно покушать! Вы очень сильно голодны, поэтому ваше здоровье снижается.") then
                    runToPoint(-1829, -1627, 23, true)
                    sampSendChat("/eat")
                end
            end
            --runToPointt()
        end
     
    end
end



function ev.onSetCheckpoint(pos)
    XX = pos.x
    YY = pos.y
    ZZ = pos.z
end

 function runToPoint(tox, toy, toz, bool)
    lua_thread.create(function()
        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 botstatus and getDistanceBetweenCoords2d(x, y, tox, toy) > 0.8 do
            setGameKeyState(1, -255)
            if bool then
                setGameKeyState(16, 1)
            end
            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
    end)
end
Ну я запустил, но видимо я где-то еще нарукожопил, не подскажешь где?
Вместо выполнение нормальной функции до задачи функции с едой - он крутится на 360 просто так
 

FixZer

Активный
126
36
Lua:
botstatus = false
local ev = require('lib.samp.events')
XX, YY, ZZ = 0, 0, 0
function main()
    while not isSampAvailable() do wait(0) end
 
    sampRegisterChatCommand('check', function()
        sampAddChatMessage(": "..XX..', '..YY..', '..ZZ,-1)
    end)
    sampRegisterChatCommand("advbot", function()
         botstatus = not botstatus
    end)
    while true do wait(0)
    
        if botstatus then
            runToPoint(-1844, -1635, 21, true)
            runToPoint(XX,YY,ZZ,true)
            runToPoint(-1854, -1629, 21,false)
            runToPoint(XX,YY,ZZ,false)
            runToPoint(-1854, -1629, 21, true)
            --runToPointt()
        end
    
    end
end



function ev.onSetCheckpoint(pos)
    XX = pos.x
    YY = pos.y
    ZZ = pos.z
end

 function runToPoint(tox, toy, toz, bool)
    lua_thread.create(function()
        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 botstatus and getDistanceBetweenCoords2d(x, y, tox, toy) > 0.8 do
            setGameKeyState(1, -255)
            if bool then
                setGameKeyState(16, 1)
            end
            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
    end)
end

function ev.onServerMessage(color, text)
    if botstatus then
        if text:find("Вам срочно нужно покушать! Вы очень сильно голодны, поэтому ваше здоровье снижается.") then
            runToPoint(-1829, -1627, 23, true)
            sampSendChat("/eat")
        end
    end
end
 

Zelensky.

Новичок
Автор темы
7
0
Lua:
botstatus = false
local ev = require('lib.samp.events')
XX, YY, ZZ = 0, 0, 0
function main()
    while not isSampAvailable() do wait(0) end
 
    sampRegisterChatCommand('check', function()
        sampAddChatMessage(": "..XX..', '..YY..', '..ZZ,-1)
    end)
    sampRegisterChatCommand("advbot", function()
         botstatus = not botstatus
    end)
    while true do wait(0)
   
        if botstatus then
            runToPoint(-1844, -1635, 21, true)
            runToPoint(XX,YY,ZZ,true)
            runToPoint(-1854, -1629, 21,false)
            runToPoint(XX,YY,ZZ,false)
            runToPoint(-1854, -1629, 21, true)
            --runToPointt()
        end
   
    end
end



function ev.onSetCheckpoint(pos)
    XX = pos.x
    YY = pos.y
    ZZ = pos.z
end

 function runToPoint(tox, toy, toz, bool)
    lua_thread.create(function()
        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 botstatus and getDistanceBetweenCoords2d(x, y, tox, toy) > 0.8 do
            setGameKeyState(1, -255)
            if bool then
                setGameKeyState(16, 1)
            end
            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
    end)
end

function ev.onServerMessage(color, text)
    if botstatus then
        if text:find("Вам срочно нужно покушать! Вы очень сильно голодны, поэтому ваше здоровье снижается.") then
            runToPoint(-1829, -1627, 23, true)
            sampSendChat("/eat")
        end
    end
end
На функцию с сообщением хотелось спросить, при runtopaint нужно ставить задержку (wait) или бот должен сам этого догадаться? 😅
 

Лебiгович

Известный
877
239
Все равно крутится...
попробуй так



Lua:
botstatus = false
local ev = require('lib.samp.events')
XX, YY, ZZ = 0, 0, 0

function ev.onSetCheckpoint(pos)
    XX = pos.x
    YY = pos.y
    ZZ = pos.z
end

function runToPoint(tox, toy, toz, bool)
    lua_thread.create(function()
        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 botstatus and getDistanceBetweenCoords2d(x, y, tox, toy) > 0.8 do
            setGameKeyState(1, -255)
            if bool then
                setGameKeyState(16, 1)
            end
            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
    end)
end

function main()
    while not isSampAvailable() do wait(0) end
 
    sampRegisterChatCommand('check', function()
        sampAddChatMessage(": "..XX..', '..YY..', '..ZZ,-1)
    end)
    
    sampRegisterChatCommand("advbot", function()
        botstatus = not botstatus
    end)
    
    while true do wait(0)
        if botstatus then
            runToPoint(-1844, -1635, 21, true)
            runToPoint(XX,YY,ZZ,true)
            runToPoint(-1854, -1629, 21,false)
            runToPoint(XX,YY,ZZ,false)
            runToPoint(-1854, -1629, 21, true)
            --runToPointt()
        end
    end
end

function ev.onServerMessage(color, text)
    if botstatus then
        if text:find("Вам срочно нужно покушать! Вы очень сильно голодны, поэтому ваше здоровье снижается.") then
            runToPoint(-1829, -1627, 23, true)
            sampSendChat("/eat")
        end
    end
end

либо так
Lua:
function main()
    while not isSampAvailable() do wait(0) end
 
    local function executeBot()
        while true do
            if botstatus then
                runToPoint(-1844, -1635, 21, true)
                runToPoint(XX,YY,ZZ,true)
                runToPoint(-1854, -1629, 21,false)
                runToPoint(XX,YY,ZZ,false)
                runToPoint(-1854, -1629, 21, true)
            end
            wait(0)
        end
    end

    lua_thread.create(executeBot)

    sampRegisterChatCommand('check', function()
        sampAddChatMessage(": "..XX..', '..YY..', '..ZZ,-1)
    end)
    
    sampRegisterChatCommand("advbot", function()
        botstatus = not botstatus
    end)
end

function ev.onSetCheckpoint(pos)
    XX = pos.x
    YY = pos.y
    ZZ = pos.z
end

function runToPoint(tox, toy, toz, bool)
    -- Ваша функция runToPoint()
end

function ev.onServerMessage(color, text)
    if botstatus then
        if text:find("Вам срочно нужно покушать! Вы очень сильно голодны, поэтому ваше здоровье снижается.") then
            runToPoint(-1829, -1627, 23, true)
            sampSendChat("/eat")
        end
    end
end
 
  • Нравится
Реакции: FixZer и Zelensky.

Zelensky.

Новичок
Автор темы
7
0

либо так
Lua:
function main()
    while not isSampAvailable() do wait(0) end
 
    local function executeBot()
        while true do
            if botstatus then
                runToPoint(-1844, -1635, 21, true)
                runToPoint(XX,YY,ZZ,true)
                runToPoint(-1854, -1629, 21,false)
                runToPoint(XX,YY,ZZ,false)
                runToPoint(-1854, -1629, 21, true)
            end
            wait(0)
        end
    end

    lua_thread.create(executeBot)

    sampRegisterChatCommand('check', function()
        sampAddChatMessage(": "..XX..', '..YY..', '..ZZ,-1)
    end)
   
    sampRegisterChatCommand("advbot", function()
        botstatus = not botstatus
    end)
end

function ev.onSetCheckpoint(pos)
    XX = pos.x
    YY = pos.y
    ZZ = pos.z
end

function runToPoint(tox, toy, toz, bool)
    -- Ваша функция runToPoint()
end

function ev.onServerMessage(color, text)
    if botstatus then
        if text:find("Вам срочно нужно покушать! Вы очень сильно голодны, поэтому ваше здоровье снижается.") then
            runToPoint(-1829, -1627, 23, true)
            sampSendChat("/eat")
        end
    end
end
Так же к сожалению
 

YarikVL

Известный
Проверенный
4,798
1,813
Так же к сожалению
Наверное ты не проверяешь свою позицию с позицией твоей цели после runToPoint. То есть ты запускаешь runToPoint(-1844, и так далее)
И тут же сразу запускаешь runToPoint(XX,YY, и так далее)
И оно выполняется "почти" параллельно

А вообще я недавно писал бота на заказ, и переписывал эту функцию:
https://www.blast.hk/threads/13380/post-1204163 еще используя эту, которая runToPoint.

Интересно если юзать такую задержку:
Вместо потока и wait(1). Тогда возможно получится так использовать эти функции подряд. Можешь попробовать, расскажешь результат.
 

Zelensky.

Новичок
Автор темы
7
0
Наверное ты не проверяешь свою позицию с позицией твоей цели после runToPoint. То есть ты запускаешь runToPoint(-1844, и так далее)
И тут же сразу запускаешь runToPoint(XX,YY, и так далее)
И оно выполняется "почти" параллельно

А вообще я недавно писал бота на заказ, и переписывал эту функцию:
https://www.blast.hk/threads/13380/post-1204163 еще используя эту, которая runToPoint.

Интересно если юзать такую задержку:
Вместо потока и wait(1). Тогда возможно получится так использовать эти функции подряд. Можешь попробовать, расскажешь результат.
Провернул так, но когда появляется "типа пизда сытость у тя" при выполнении функции сбрасывается то что он выполнял и куда-то в другую сторону идет, но не туда куда надо.

Код:
local botstatus = false
local eat = false

local ev = require('lib.samp.events')
XX, YY, ZZ = 0, 0, 0
function main()
    while not isSampAvailable() do wait(0) end
 
    sampRegisterChatCommand('check', function()
        sampAddChatMessage(": "..XX..', '..YY..', '..ZZ,-1)
    end)
    sampRegisterChatCommand("advbot", function()
         botstatus = not botstatus
    end)
    while true do wait(0)

        if botstatus then
            if not eat then
                runToPoint(-1844, -1635, 21, true)
                runToPoint(XX,YY,ZZ,true)
                runToPoint(-1854, -1629, 21,false)
                runToPoint(XX,YY,ZZ,false)
                runToPoint(-1854, -1629, 21, true)
            else
                runToPoint(-1829, -1627, 23, true)
                sampSendChat("/eat")
            end
        end

    end
end



function ev.onSetCheckpoint(pos)
    XX = pos.x
    YY = pos.y
    ZZ = pos.z
end

 function runToPoint(tox, toy, toz, bool)
    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 botstatus and getDistanceBetweenCoords2d(x, y, tox, toy) > 0.8 do
        setGameKeyState(1, -255)
        if bool then
            setGameKeyState(16, 1)
        end
        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
end

function ev.onServerMessage(color, text)
    if botstatus then
        if text:find("Вам срочно нужно покушать! Вы очень сильно голодны, поэтому ваше здоровье снижается.") then
            eat = true
        end
    end
end

Если сможешь помочь, чтобы при работе появился "Вам срочно нужно покушать! Вы очень сильно голодны, поэтому ваше здоровье снижается." направился к коордам, /eat прописал - готов заплатить нужную сумму, которую предложишь ты.
 
Последнее редактирование: