-- доков вообще нету, сам пробуй разные значения mode, и смотри, что они значат
taskGoToCoordAnyMeans(Ped ped, float toX, float toY, float toZ, int mode, Vehicle useCar)
-- вырезано из старого скрипта, что как работает не особо помню
-- помню только что MOVEMODE_*** - режимы ходьбы
local MOVEMODE_AUTO = 0
local MOVEMODE_WALK = 1
local MOVEMODE_RUN = 2
local MOVEMODE_RUNNOJUMP = 3
do
local _autoMode_Run_Minleght = 5
local _jumpMinLength = 10
local function length(vec)
return math.sqrt((vec.x*vec.x)+(vec.y*vec.y)+(vec.z*vec.z))
end
local function sub(a, b)
return vec3(a.x - b.x, a.y - b.y, a.z - b.z)
end
local function _calcAngle(x, y)
local px, py = getCharCoordinates(PLAYER_PED)
local plus = 0.0
local mode = 1
if px < x and py > y then plus = math.pi/2; mode = 2 end
if px < x and py < y then plus = math.pi end
if px > x and py < y then plus = math.pi*1.5; mode = 2 end
local lx = x - px
local ly = y - py
lx = math.abs(lx)
ly = math.abs(ly)
if mode == 1 then ly = ly/lx
else ly = lx/ly end
ly = math.atan(ly)
ly = ly + plus
return ly
end
local function _setAngle(x, y, distance, speed)
setCameraPositionUnfixed(-0.3, _calcAngle(x,y))
end
GoToPoint = function(x, y, z, moveMode, runAutoMode)
local runAutoMode = runAutoMode or MOVEMODE_RUN
local last_jump_time = winmm.timeGetTime()
math.randomseed(os.time())
local cur_jump_mul = math.random(170)
local target = vec3(x, y, z)
repeat
local ppos = vec3(getCharCoordinates(PLAYER_PED))
local dist_lost = length(sub(vec3(ppos.x, ppos.y, 0), vec3(target.x, target.y, 0)))
local targetMoveMode = moveMode == MOVEMODE_AUTO and (dist_lost > _autoMode_Run_Minleght and runAutoMode or MOVEMODE_WALK) or moveMode
_setAngle(target.x, target.y, dist_lost, 0.1)
setGameKeyState(gkeys.player.GOFORWARD_GOBACK, -255)
if dist_lost >= _jumpMinLength and targetMoveMode == MOVEMODE_RUN and (winmm.timeGetTime() - last_jump_time) >= 1500 + cur_jump_mul then
setGameKeyState(gkeys.player.JUMP, 255)
last_jump_time = winmm.timeGetTime()
math.randomseed(os.time())
cur_jump_mul = math.random(500)
goto continue
end
if targetMoveMode == MOVEMODE_RUN or targetMoveMode == MOVEMODE_RUNNOJUMP then
setGameKeyState(gkeys.player.SPRINT, 255)
end
::continue:: wait(0) until dist_lost < 0.7
end
end
Было бы не плохо если привёл какой-то универсальный пример например чтобы можно было не на одну работу написать а на шахту или автобусника, хочу написать для сервера My Home RPтебе по этапно описать как делать?
Могу пошагово, чтоб было максимально подробно
Нахуя на нубо эрпэ писать ботаБыло бы не плохо если привёл какой-то универсальный пример например чтобы можно было не на одну работу написать а на шахту или автобусника, хочу написать для сервера My Home RP
Так что на этот сервер что на аризону, код будет одинаковымНахуя на нубо эрпэ писать бота
1. Для передвежения можешь юзать либо:
либо:Lua:-- доков вообще нету, сам пробуй разные значения mode, и смотри, что они значат taskGoToCoordAnyMeans(Ped ped, float toX, float toY, float toZ, int mode, Vehicle useCar)
Lua:-- вырезано из старого скрипта, что как работает не особо помню -- помню только что MOVEMODE_*** - режимы ходьбы local MOVEMODE_AUTO = 0 local MOVEMODE_WALK = 1 local MOVEMODE_RUN = 2 local MOVEMODE_RUNNOJUMP = 3 do local _autoMode_Run_Minleght = 5 local _jumpMinLength = 10 local function length(vec) return math.sqrt((vec.x*vec.x)+(vec.y*vec.y)+(vec.z*vec.z)) end local function sub(a, b) return vec3(a.x - b.x, a.y - b.y, a.z - b.z) end local function _calcAngle(x, y) local px, py = getCharCoordinates(PLAYER_PED) local plus = 0.0 local mode = 1 if px < x and py > y then plus = math.pi/2; mode = 2 end if px < x and py < y then plus = math.pi end if px > x and py < y then plus = math.pi*1.5; mode = 2 end local lx = x - px local ly = y - py lx = math.abs(lx) ly = math.abs(ly) if mode == 1 then ly = ly/lx else ly = lx/ly end ly = math.atan(ly) ly = ly + plus return ly end local function _setAngle(x, y, distance, speed) setCameraPositionUnfixed(-0.3, _calcAngle(x,y)) end GoToPoint = function(x, y, z, moveMode, runAutoMode) local runAutoMode = runAutoMode or MOVEMODE_RUN local last_jump_time = winmm.timeGetTime() math.randomseed(os.time()) local cur_jump_mul = math.random(170) local target = vec3(x, y, z) repeat local ppos = vec3(getCharCoordinates(PLAYER_PED)) local dist_lost = length(sub(vec3(ppos.x, ppos.y, 0), vec3(target.x, target.y, 0))) local targetMoveMode = moveMode == MOVEMODE_AUTO and (dist_lost > _autoMode_Run_Minleght and runAutoMode or MOVEMODE_WALK) or moveMode _setAngle(target.x, target.y, dist_lost, 0.1) setGameKeyState(gkeys.player.GOFORWARD_GOBACK, -255) if dist_lost >= _jumpMinLength and targetMoveMode == MOVEMODE_RUN and (winmm.timeGetTime() - last_jump_time) >= 1500 + cur_jump_mul then setGameKeyState(gkeys.player.JUMP, 255) last_jump_time = winmm.timeGetTime() math.randomseed(os.time()) cur_jump_mul = math.random(500) goto continue end if targetMoveMode == MOVEMODE_RUN or targetMoveMode == MOVEMODE_RUNNOJUMP then setGameKeyState(gkeys.player.SPRINT, 255) end ::continue:: wait(0) until dist_lost < 0.7 end end
2. брать чекпоинты setGameKeyState, либо напрямую в пакете отправлять серверу клавишу
3. чекать, когда взял чекпоинт - по чату, либо под другим событиям
4. получить позицию чекпоинта через фукнцию нельзя (как-то можно, но нормальнымы способами - нет). Но есть событие onSetCheckpoint (samp.lua), которое вызывается когда сервер ставит чекпоинт, там коорды есть
local checkpoint = nil
function onSetCheckpoint(x, y)
checkpoint = {x = x, y = y}
end
function runToCheckpoints()
local x, y, z = getCharCoordinates(PLAYER_PED)
while checkpoint do
local tox, toy = checkpoint.x, checkpoint.y
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)
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
checkpoint = nil
end
end
function main()
runToCheckpoints()
end
main()
Попробуй поставить проверку, загружен ли вообще сампТак что на этот сервер что на аризону, код будет одинаковым
Lua:local checkpoint = nil function onSetCheckpoint(x, y) checkpoint = {x = x, y = y} end function runToCheckpoints() local x, y, z = getCharCoordinates(PLAYER_PED) while checkpoint do local tox, toy = checkpoint.x, checkpoint.y 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) 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 checkpoint = nil end end function main() runToCheckpoints() end main()
Таким макаром? проблема в том что он не бежит к чекпойнту
Я в какой-то теме на форуме этом прочитал что типа main надо вызывать. Просто странно что сам скрипт загружается moonloader-ом.Попробуй поставить проверку, загружен ли вообще самп
И зачем ты в конце мейн вызваля не понятно
local checkpoint = nil
function onSetCheckpoint(x, y)
checkpoint = {x = x, y = y}
end
function runToCheckpoints()
local x, y, z = getCharCoordinates(PLAYER_PED)
while checkpoint do
local tox, toy = checkpoint.x, checkpoint.y
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)
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
checkpoint = nil
end
end
function main()
if isGameRunning() then
runToCheckpoints()
else
print("В данный момент игра не запущена")
end
end
Я в какой-то теме на форуме этом прочитал что типа main надо вызывать. Просто странно что сам скрипт загружается moonloader-ом.
Lua:local checkpoint = nil function onSetCheckpoint(x, y) checkpoint = {x = x, y = y} end function runToCheckpoints() local x, y, z = getCharCoordinates(PLAYER_PED) while checkpoint do local tox, toy = checkpoint.x, checkpoint.y 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) 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 checkpoint = nil end end function main() if isGameRunning() then runToCheckpoints() else print("В данный момент игра не запущена") end end
local checkpoint = nil
function onSetCheckpoint(x, y)
checkpoint = {x = x, y = y}
end
function runToCheckpoints()
local x, y, z = getCharCoordinates(PLAYER_PED)
while checkpoint do
local tox, toy = checkpoint.x, checkpoint.y
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)
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
checkpoint = nil
end
end
function main()
if not isSampLoaded() or not isSampfuncsLoaded() then return end
while not isSampAvailable() do wait(100) end
runToCheckpoints()
end
Спасибо опробуюLua:local checkpoint = nil function onSetCheckpoint(x, y) checkpoint = {x = x, y = y} end function runToCheckpoints() local x, y, z = getCharCoordinates(PLAYER_PED) while checkpoint do local tox, toy = checkpoint.x, checkpoint.y 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) 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 checkpoint = nil end end function main() if not isSampLoaded() or not isSampfuncsLoaded() then return end while not isSampAvailable() do wait(100) end runToCheckpoints() end
Нет не работает, скорее всего и не заработаетLua:local checkpoint = nil function onSetCheckpoint(x, y) checkpoint = {x = x, y = y} end function runToCheckpoints() local x, y, z = getCharCoordinates(PLAYER_PED) while checkpoint do local tox, toy = checkpoint.x, checkpoint.y 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) 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 checkpoint = nil end end function main() if not isSampLoaded() or not isSampfuncsLoaded() then return end while not isSampAvailable() do wait(100) end runToCheckpoints() end
[22:20:09.528157] (system) bot.lua: Loaded successfully.
не работал с ботами, хзСпасибо опробую
Нет не работает, скорее всего и не заработает
Посмотреть вложение 189789
Код:[22:20:09.528157] (system) bot.lua: Loaded successfully.
У них sampfuncs не даёт запустить игру
local checkpoint = nil
function onSetCheckpoint(x, y)
checkpoint = {x = x, y = y}
end
function runToCheckpoints()
local x, y, z = getCharCoordinates(PLAYER_PED)
while checkpoint do
local tox, toy = checkpoint.x, checkpoint.y
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)
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
checkpoint = nil
end
end
function main()
if not isSampLoaded() or not isSampfuncsLoaded() then return end
while not isSampAvailable() do wait(100) end
sampRegisterChatCommand('marker', function()--при вводе команды /marker должно побежать
runToCheckpoints()
end)
end