Гайд Smooth Aimbot.

Carrentine

Потрачен
Автор темы
570
460
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Алгоритм:
- найти id / handle противника;
- получить свои координаты, и противника;
- найти вектор между вами и противником;
- получить текущие углы, и угол до противника;
- вычислить разницу между текущим углом и нужным, и поделить на кол-во smooth;
- установить новые значения угла.

Создаем новый .lua скрипт, назовем его, к примеру, 'Smooth_Test'.
В этом гайде мы сделаем все качественно, а главное хайпово и стильно.
А для этого нам понадобится подключить ImGui, и константы vKeys.
Подключаем:
Lua:
local ImGui = require('ImGui')
local vKeys = require('vKeys')
Далее создаем таблицу, где в будущем будем хранить все переменные окна.
Lua:
CFG =
{
    Default =
    {
        WindowProc = ImGui.ImBool(false)
    },
    CheckBoxes =
    {
        Enable = ImGui.ImBool(false)
    },
    Sliders =
    {
        Smooth = ImGui.ImFloat(1.0),
        FieldOfVisible = ImGui.ImFloat(1.0)
    }
}
В функции main делаем проверку на инициализацию структур сампа, вставляем туда обработчик окна на клавишу X и регаем поток.
Lua:
function main()
    if not initialized then
        if not isSampAvailable() then return false end
        lua_thread.create(Aimbot)
        initialized = true
    end
    if wasKeyPressed(vKeys.VK_X) then
        CFG.Default.WindowProc.v = not CFG.Default.WindowProc.v
        ImGui.Process = CFG.Default.WindowProc.v
    end
    return false
end
Далее регистрируем сам обработчик ImGui и вставляем туда нужные элементы.
Lua:
function ImGui.OnDrawFrame()
    if CFG.Default.WindowProc.v then
        ImGui.Begin('Menu', CFG.Default.WindowProc)
        ImGui.SliderFloat('Smooth', CFG.Sliders.Smooth, 1.0, 30.0, '%.1f')
        ImGui.SliderFloat('FOV', CFG.Sliders.FieldOfVisible, 1.0, 50.0, '%.1f')
        ImGui.Checkbox('Enable', CFG.CheckBoxes.Enable)
        ImGui.End()
    end
end
Добавляем функцию для поиска противника и фикса угла.
Lua:
function fix(angle)
    if angle > math.pi then
        angle = angle - (math.pi * 2)
    elseif angle < -math.pi then
        angle = angle + (math.pi * 2)
    end
    return angle
end

function GetNearestPed(fov)
    local maxDistance = 35
    local nearestPED = -1
    for i = 0, sampGetMaxPlayerId(true) do
        if sampIsPlayerConnected(i) then
            local find, handle = sampGetCharHandleBySampPlayerId(i)
            if find then
                if isCharOnScreen(handle) then
                    if not isCharDead(handle) then
                        local _, currentID = sampGetPlayerIdByCharHandle(PLAYER_PED)
                        local enPos = {getCharCoordinates(handle)}
                        local myPos = {getActiveCameraCoordinates()}
                        local vector = {myPos[1] - enPos[1], myPos[2] - enPos[2], myPos[3] - enPos[3]}
                        if isWidescreenOnInOptions() then coefficentZ = 0.0778 else coefficentZ = 0.103 end
                        local angle = {(math.atan2(vector[2], vector[1]) + 0.04253), (math.atan2((math.sqrt((math.pow(vector[1], 2) + math.pow(vector[2], 2)))), vector[3]) - math.pi / 2 - coefficentZ)}
                        local view = {fix(representIntAsFloat(readMemory(0xB6F258, 4, false))), fix(representIntAsFloat(readMemory(0xB6F248, 4, false)))}
                        local distance = math.sqrt((math.pow(angle[1] - view[1], 2) + math.pow(angle[2] - view[2], 2))) * 57.2957795131
                        if distance > fov then check = true else check = false end
                        if not check then
                            local myPos = {getCharCoordinates(PLAYER_PED)}
                            local distance = math.sqrt((math.pow((enPos[1] - myPos[1]), 2) + math.pow((enPos[2] - myPos[2]), 2) + math.pow((enPos[3] - myPos[3]), 2)))
                            if (distance < maxDistance) then
                                nearestPED = handle
                                maxDistance = distance
                            end
                        end
                    end
                end
            end
        end
    end
    return nearestPED
end
Далее вставляем поток самого аимбота и вуаля, наш аимбот готов.
Lua:
function Aimbot()
    if CFG.CheckBoxes.Enable.v and isKeyDown(vKeys.VK_RBUTTON) and isKeyDown(vKeys.VK_LBUTTON) then
        local handle = GetNearestPed(CFG.Sliders.FieldOfVisible.v)
        if handle ~= -1 then
            local myPos = {getActiveCameraCoordinates()}
            local enPos = {getCharCoordinates(handle)}
            local vector = {myPos[1] - enPos[1], myPos[2] - enPos[2], myPos[3] - enPos[3]}
            if isWidescreenOnInOptions() then coefficentZ = 0.0778 else coefficentZ = 0.103 end
            local angle = {(math.atan2(vector[2], vector[1]) + 0.04253), (math.atan2((math.sqrt((math.pow(vector[1], 2) + math.pow(vector[2], 2)))), vector[3]) - math.pi / 2 - coefficentZ)}
            local view = {fix(representIntAsFloat(readMemory(0xB6F258, 4, false))), fix(representIntAsFloat(readMemory(0xB6F248, 4, false)))}
            local difference = {angle[1] - view[1], angle[2] - view[2]}
            local smooth = {difference[1] / CFG.Sliders.Smooth.v, difference[2] / CFG.Sliders.Smooth.v}
            setCameraPositionUnfixed((view[2] + smooth[2]), (view[1] + smooth[1]))
        end
    end
    return false
end
Теперь разберем пошагово сам Aimbot.
Вставляем проверку на то, что аимбот включен, и зажаты клавиши ПКМ + ЛКМ, и при помощи функции GetNearestPed() получаем ближайшего к вашему педу противника, который попадает в фов вашего аимбота (в градусах).
Lua:
if CFG.CheckBoxes.Enable.v and isKeyDown(vKeys.VK_RBUTTON) and isKeyDown(vKeys.VK_LBUTTON) then
    local handle = GetNearestPed(CFG.Sliders.FieldOfVisible.v)
    if handle ~= -1 then
    end
end
Далее получаем свои координаты, и координаты противника. Получаем вектор.
Lua:
local myPos = {getActiveCameraCoordinates()}
local enPos = {getCharCoordinates(handle)}
local vector = {myPos[1] - enPos[1], myPos[2] - enPos[2], myPos[3] - enPos[3]}
В зависимости от того, включен или выключен широкоэкранный режим в настройках, получаем нужный коэффициент смещения прицела, и вычисляем угол между нашим педом и противником, так же получаем текущий угол.
Lua:
if isWidescreenOnInOptions() then coefficentZ = 0.0778 else coefficentZ = 0.103 end
local angle = {(math.atan2(vector[2], vector[1]) + 0.04253), (math.atan2((math.sqrt((math.pow(vector[1], 2) + math.pow(vector[2], 2)))), vector[3]) - math.pi / 2 - coefficentZ)}
local view = {fix(representIntAsFloat(readMemory(0xB6F258, 4, false))), fix(representIntAsFloat(readMemory(0xB6F248, 4, false)))}
Далее получаем разницу между текущим углом, и нужным углом до противника, делим разницу на smooth и устанавливаем новые значения угла. Все заработает как по маслу)
Lua:
local difference = {angle[1] - view[1], angle[2] - view[2]}
local smooth = {difference[1] / CFG.Sliders.Smooth.v, difference[2] / CFG.Sliders.Smooth.v}
setCameraPositionUnfixed((view[2] + smooth[2]), (view[1] + smooth[1]))
Угол поворота в радианах, а не в градусах. В фове мы специально преобразовали радианы в градусы.
Нужно подбирать коэффициенты смещения прицела для каждого оружия самостоятельно, в данном примере мы установили смещение лишь для дигла.
 

xLooney666

Потрачен
137
45
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Фулл код. Не благодарите)

Lua:
local ImGui = require('ImGui')
local vKeys = require('vKeys')

CFG =
{
    Default =
    {
        WindowProc = ImGui.ImBool(false)
    },
    CheckBoxes =
    {
        Enable = ImGui.ImBool(false)
    },
    Sliders =
    {
        Smooth = ImGui.ImFloat(1.0),
        FieldOfVisible = ImGui.ImFloat(1.0)
    }
}

function main()
    if not initialized then
        if not isSampAvailable() then return false end
        lua_thread.create(Aimbot)
        initialized = true
    end
    if wasKeyPressed(vKeys.VK_X) then
        CFG.Default.WindowProc.v = not CFG.Default.WindowProc.v
        ImGui.Process = CFG.Default.WindowProc.v
    end
    return false
end

function ImGui.OnDrawFrame()
    if CFG.Default.WindowProc.v then
        ImGui.Begin('Menu', CFG.Default.WindowProc)
        ImGui.SliderFloat('Smooth', CFG.Sliders.Smooth, 1.0, 30.0, '%.1f')
        ImGui.SliderFloat('FOV', CFG.Sliders.FieldOfVisible, 1.0, 50.0, '%.1f')
        ImGui.Checkbox('Enable', CFG.CheckBoxes.Enable)
        ImGui.End()
    end
end

function fix(angle)
    if angle > math.pi then
        angle = angle - (math.pi * 2)
    elseif angle < -math.pi then
        angle = angle + (math.pi * 2)
    end
    return angle
end

function GetNearestPed(fov)
    local maxDistance = 35
    local nearestPED = -1
    for i = 0, sampGetMaxPlayerId(true) do
        if sampIsPlayerConnected(i) then
            local find, handle = sampGetCharHandleBySampPlayerId(i)
            if find then
                if isCharOnScreen(handle) then
                    if not isCharDead(handle) then
                        local _, currentID = sampGetPlayerIdByCharHandle(PLAYER_PED)
                        local enPos = {getCharCoordinates(handle)}
                        local myPos = {getActiveCameraCoordinates()}
                        local vector = {myPos[1] - enPos[1], myPos[2] - enPos[2], myPos[3] - enPos[3]}
                        if isWidescreenOnInOptions() then coefficentZ = 0.0778 else coefficentZ = 0.103 end
                        local angle = {(math.atan2(vector[2], vector[1]) + 0.04253), (math.atan2((math.sqrt((math.pow(vector[1], 2) + math.pow(vector[2], 2)))), vector[3]) - math.pi / 2 - coefficentZ)}
                        local view = {fix(representIntAsFloat(readMemory(0xB6F258, 4, false))), fix(representIntAsFloat(readMemory(0xB6F248, 4, false)))}
                        local distance = math.sqrt((math.pow(angle[1] - view[1], 2) + math.pow(angle[2] - view[2], 2))) * 57.2957795131
                        if distance > fov then check = true else check = false end
                        if not check then
                            local myPos = {getCharCoordinates(PLAYER_PED)}
                            local distance = math.sqrt((math.pow((enPos[1] - myPos[1]), 2) + math.pow((enPos[2] - myPos[2]), 2) + math.pow((enPos[3] - myPos[3]), 2)))
                            if (distance < maxDistance) then
                                nearestPED = handle
                                maxDistance = distance
                            end
                        end
                    end
                end
            end
        end
    end
    return nearestPED
end

function Aimbot()
    if CFG.CheckBoxes.Enable.v and isKeyDown(vKeys.VK_RBUTTON) and isKeyDown(vKeys.VK_LBUTTON) then
        local handle = GetNearestPed(CFG.Sliders.FieldOfVisible.v)
        if handle ~= -1 then
            local myPos = {getActiveCameraCoordinates()}
            local enPos = {getCharCoordinates(handle)}
            local vector = {myPos[1] - enPos[1], myPos[2] - enPos[2], myPos[3] - enPos[3]}
            if isWidescreenOnInOptions() then coefficentZ = 0.0778 else coefficentZ = 0.103 end
            local angle = {(math.atan2(vector[2], vector[1]) + 0.04253), (math.atan2((math.sqrt((math.pow(vector[1], 2) + math.pow(vector[2], 2)))), vector[3]) - math.pi / 2 - coefficentZ)}
            local view = {fix(representIntAsFloat(readMemory(0xB6F258, 4, false))), fix(representIntAsFloat(readMemory(0xB6F248, 4, false)))}
            local difference = {angle[1] - view[1], angle[2] - view[2]}
            local smooth = {difference[1] / CFG.Sliders.Smooth.v, difference[2] / CFG.Sliders.Smooth.v}
            setCameraPositionUnfixed((view[2] + smooth[2]), (view[1] + smooth[1]))
        end
    end
    return false
end

Ну, тема годная👍
 
  • Нравится
Реакции: Carrentine

Carrentine

Потрачен
Автор темы
570
460
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
BHP:
Lua:
local yaw = fix(math.rad(getHeadingFromVector2d(aim_x - cam_x, aim_y - cam_y)-90.0) + coefficent_yaw)
                                                                            local pitch = fix(math.atan2(aim_z - cam_z, math.sqrt( math.pow(aim_x - cam_x, 2) + math.pow(aim_y - cam_y, 2))) + coefficent_pitch)
                                                                            local yaw_module = math.abs(yaw)
                                                                            local pitch_module = math.abs(pitch)
                                                                            local yaw_distance_module = 0.0
                                                                            local pitch_distance_module = 0.0
                                                                            --distantion define
                                                                            if ((src_yaw > 0.0) and (yaw < 0.0)) or ((yaw > 0.0) and (src_yaw < 0.0)) then
                                                                                yaw_distance_module = src_yaw_module + yaw_module
                                                                            else
                                                                                if (src_yaw_module > yaw_module) then
                                                                                    yaw_distance_module = src_yaw_module - yaw_module
                                                                                elseif (yaw_module > src_yaw_module) then
                                                                                    yaw_distance_module = yaw_module - src_yaw_module
                                                                                end
                                                                            end
                                                                            if ((src_pitch > 0.0) and (pitch < 0.0)) or ((pitch > 0.0) and (src_pitch < 0.0)) then
                                                                                pitch_distance_module = src_pitch_module + pitch_module
                                                                            else
                                                                                if (src_pitch_module > pitch_module) then
                                                                                    pitch_distance_module = src_pitch_module - pitch_module
                                                                                elseif (pitch_module > src_pitch_module) then
                                                                                    pitch_distance_module = pitch_module - src_pitch_module
                                                                                end
                                                                            end
                                                                            --defined
                                                                            --aiming start
                                                                            if not (yaw_distance_module == 0.0) then
                                                                                --begin
                                                                                if src_yaw > yaw then
                                                                                    if (yaw_distance_module > math.pi) then    --exception
                                                                                        yaw_distance_module = (math.pi*2 - yaw_distance_module)
                                                                                        yaw_distance = yaw_distance_module / elements.sliders.time.v
                                                                                    else
                                                                                        yaw_distance = - yaw_distance_module / elements.sliders.time.v
                                                                                    end
                                                                                else
                                                                                    if (yaw_distance_module > math.pi) then    --exception
                                                                                        yaw_distance_module = (math.pi*2 - yaw_distance_module)
                                                                                        yaw_distance = - yaw_distance_module / elements.sliders.time.v
                                                                                    else
                                                                                        yaw_distance = yaw_distance_module / elements.sliders.time.v
                                                                                    end
                                                                                end
                                                                                --end
                                                                            end
                                                                            if not (pitch_distance_module == 0.0) then
                                                                                --begin
                                                                                if src_pitch > pitch then
                                                                                    if (pitch_distance_module > math.pi) then    --exception
                                                                                        pitch_distance_module = (math.pi*2 - pitch_distance_module)
                                                                                        pitch_distance = pitch_distance_module / elements.sliders.time.v
                                                                                    else
                                                                                        pitch_distance = - pitch_distance_module / elements.sliders.time.v
                                                                                    end
                                                                                else
                                                                                    if (pitch_distance_module > math.pi) then    --exception
                                                                                        pitch_distance_module = (math.pi*2 - pitch_distance_module)
                                                                                        pitch_distance = - pitch_distance_module / elements.sliders.time.v
                                                                                    else
                                                                                        pitch_distance = pitch_distance_module / elements.sliders.time.v
                                                                                    end
                                                                                end
                                                                                --end
                                                                            end
                                                                            --aiming stop
                                                                            if not elements.checkboxes.fieldofvisible.v or (elements.checkboxes.fieldofvisible.v and (yaw_distance_module < elements.sliders.fieldofvisible_radians.v) and (pitch_distance_module < elements.sliders.fieldofvisible_radians.v)) then
                                                                                if elements.checkboxes.reverse.v then
                                                                                    if yaw_distance > 0.0 then
                                                                                        yaw_distance = (yaw_distance_module - yaw_distance)
                                                                                    else
                                                                                        yaw_distance = - (yaw_distance_module + yaw_distance)
                                                                                    end
                                                                                    if pitch_distance > 0.0 then
                                                                                        pitch_distance = (pitch_distance_module - pitch_distance)
                                                                                    else
                                                                                        pitch_distance = - (pitch_distance_module + pitch_distance)
                                                                                    end
                                                                                end
                                                                                if yaw_distance_minimal == 0.0 or pitch_distance_minimal == 0.0 or math.abs(yaw_distance) < math.abs(yaw_distance_minimal) or math.abs(pitch_distance) < math.abs(pitch_distance_minimal) then
                                                                                    yaw_distance_minimal = yaw_distance
                                                                                    pitch_distance_minimal = pitch_distance
                                                                                end
                                                                            end
Мой:
Lua:
local myPos = {getActiveCameraCoordinates()}
            local enPos = {getCharCoordinates(handle)}
            local vector = {myPos[1] - enPos[1], myPos[2] - enPos[2], myPos[3] - enPos[3]}
            if isWidescreenOnInOptions() then coefficentZ = 0.0778 else coefficentZ = 0.103 end
            local angle = {(math.atan2(vector[2], vector[1]) + 0.04253), (math.atan2((math.sqrt((math.pow(vector[1], 2) + math.pow(vector[2], 2)))), vector[3]) - math.pi / 2 - coefficentZ)}
            local view = {fix(representIntAsFloat(readMemory(0xB6F258, 4, false))), fix(representIntAsFloat(readMemory(0xB6F248, 4, false)))}
            local difference = {angle[1] - view[1], angle[2] - view[2]}
            local smooth = {difference[1] / CFG.Sliders.Smooth.v, difference[2] / CFG.Sliders.Smooth.v}
            setCameraPositionUnfixed((view[2] + smooth[2]), (view[1] + smooth[1]))
А теперь сравни, умник.
 
  • Нравится
  • Злость
Реакции: 01EG и brabus

Carrentine

Потрачен
Автор темы
570
460
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
> кидать большие куски кода
> объяснять куски одним предложением
ахуеть гайд
есть для этого алгоритм, который предоставлен в начале темы, а я лишь показываю, как превратить идею в реальность, да и большие куски кода - это дополнительные функции, вовсе не нуждающиеся в объяснении. я объяснил, найти разницу между текущим и нужным углом, и поделить разницу на кол-во смутч, что тут сложного?
 
  • Злость
Реакции: brabus

hahabog

Новичок
26
4
говорила мне физичка, что свойства векторов пригодятся, но сомневаюсь, что она имела ввиду это
 
  • Нравится
Реакции: deleted-user-521122

Похожие темы

  1. Ответы
    28
    Просмотры
    37K
  2. Ответы
    3
    Просмотры
    4K
  3. У
    • Решено
    Ответы
    1
    Просмотры
    1K