- 243
- 56
- Версия MoonLoader
- .026-beta
наговнокодил вот этот код ниже, трабл в чем:
первый раз бот прибегает отлично, делает то что нужно, но после того как нажал альт - не ищет следующую метку, и не бежит на нее (иногда ищет и бежит), не понимаю из-за чего это, подскажите плз
UPD: Выяснил ошибку, она заключалась в функции GetNearest3DText, которая даже после того как 3dtext на координатах был изменен, все равно выдавала те же координаты, и бот делал лишние и непонятные движения. Вопрос таков: как можно заменить эту функцию, чем?
первый раз бот прибегает отлично, делает то что нужно, но после того как нажал альт - не ищет следующую метку, и не бежит на нее (иногда ищет и бежит), не понимаю из-за чего это, подскажите плз
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
Последнее редактирование: