- 569
- 462
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Алгоритм:
- найти id / handle противника;
- получить свои координаты, и противника;
- найти вектор между вами и противником;
- получить текущие углы, и угол до противника;
- вычислить разницу между текущим углом и нужным, и поделить на кол-во smooth;
- установить новые значения угла.
Создаем новый .lua скрипт, назовем его, к примеру, 'Smooth_Test'.
В этом гайде мы сделаем все качественно, а главное хайпово и стильно.
А для этого нам понадобится подключить ImGui, и константы vKeys.
Подключаем:
Далее создаем таблицу, где в будущем будем хранить все переменные окна.
В функции main делаем проверку на инициализацию структур сампа, вставляем туда обработчик окна на клавишу X и регаем поток.
Далее регистрируем сам обработчик ImGui и вставляем туда нужные элементы.
Добавляем функцию для поиска противника и фикса угла.
Далее вставляем поток самого аимбота и вуаля, наш аимбот готов.
Теперь разберем пошагово сам Aimbot.
Вставляем проверку на то, что аимбот включен, и зажаты клавиши ПКМ + ЛКМ, и при помощи функции GetNearestPed() получаем ближайшего к вашему педу противника, который попадает в фов вашего аимбота (в градусах).
Далее получаем свои координаты, и координаты противника. Получаем вектор.
В зависимости от того, включен или выключен широкоэкранный режим в настройках, получаем нужный коэффициент смещения прицела, и вычисляем угол между нашим педом и противником, так же получаем текущий угол.
Далее получаем разницу между текущим углом, и нужным углом до противника, делим разницу на smooth и устанавливаем новые значения угла. Все заработает как по маслу)
- найти 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)
}
}
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
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
Вставляем проверку на то, что аимбот включен, и зажаты клавиши ПКМ + ЛКМ, и при помощи функции 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)))}
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]))
Угол поворота в радианах, а не в градусах. В фове мы специально преобразовали радианы в градусы.
Нужно подбирать коэффициенты смещения прицела для каждого оружия самостоятельно, в данном примере мы установили смещение лишь для дигла.
Нужно подбирать коэффициенты смещения прицела для каждого оружия самостоятельно, в данном примере мы установили смещение лишь для дигла.