|
Новичок
Регистрация: 28.07.2024
Сообщений: 3
С нами:
946126
Репутация:
1
|
|
Вот минимальный код триггербота
c++:
Код:
void CAimbot::Triggerbot()
{
if (g_Config.g_Aimbot.bTriggerbot && g_Config.g_Aimbot.bAimbotEnabled[pSAMP->getPlayers()->pLocalPlayer->byteCurrentWeapon] && bCrosshair)
{
static ULONGLONG iTick = GetTickCount64();
if (g_Config.g_Aimbot.bTriggerDelay && GetTickCount64() - iTick g_GameKeyState[BUTTON_CIRCLE] = { 0xFF, true };
iTick = GetTickCount64();
}
}
else
{
// Обычный режим - raycast от камеры
CVector vecCamera, vecOrigin, vecTarget;
if (pSAMP->getPlayers()->pLocalPlayer->byteCurrentWeapon != 34)
{
// Обычное оружие
Utils::getBonePosition(FindPlayerPed(), BONE_RIGHTWRIST, &vecOrigin);
TheCamera.Find3rdPersonCamTargetVector(100.f, vecOrigin, &vecCamera, &vecTarget);
}
else
{
// Снайперка - луч из центра экрана
CVector vecFront = TheCamera.m_aCams[0].m_vecFront;
vecFront.Normalise();
vecCamera = *TheCamera.GetGameCamPosition();
vecCamera += (vecFront * 2.0f);
vecTarget = vecCamera + (vecFront * 100.f);
}
// Проверка попадания луча
CColPoint pCollision; CEntity* pCollisionEntity = NULL;
bool bCollision = CWorld::ProcessLineOfSight(vecCamera, vecTarget, pCollision, pCollisionEntity,
!g_Config.g_Aimbot.bLockThroughObjects, !g_Config.g_Aimbot.bLockThroughObjects,
true, true, true, true, false, true);
if (bCollision && pCollisionEntity && pCollisionEntity->m_nType == ENTITY_TYPE_PED)
{
for (int i = 0; i isPlayerStreamed(i))
continue;
CPed* pPed = CPools::GetPed(pSAMP->getPlayers()->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->ulGTAEntityHandle);
if (!pPed || pPed == FindPlayerPed() || pCollisionEntity != pPed || !pPed->IsAlive())
continue;
// Защита тиммейтов
if (g_Config.g_Aimbot.bTeamProtect && pSAMP->getPlayerColor(i) == pSAMP->getPlayerColor(pSAMP->getPlayers()->sLocalPlayerID))
continue;
// Фильтры
if (!g_Config.g_Aimbot.bIgnoreEverything)
{
if (g_Config.g_Aimbot.bIgnoreAFK && pSAMP->getPlayers()->pRemotePlayer[i]->pPlayerData->iAFKState == 2)
continue;
float fDistanceFromEnemy = Math::vect3_dist(
&pSAMP->getPlayers()->pRemotePlayer[i]->pPlayerData->pSAMP_Actor->pGTA_Ped->base.matrix[12],
&pSAMP->getPlayers()->pLocalPlayer->pSAMP_Actor->pGTA_Ped->base.matrix[12]);
if (!g_Config.g_Aimbot.bIgnoreMaxDistance && fDistanceFromEnemy > fWeaponRange[pSAMP->getPlayers()->pLocalPlayer->byteCurrentWeapon])
continue;
}
// Выстрел
pKeyHook->g_GameKeyState[BUTTON_CIRCLE] = { 0xFF, true };
iTick = GetTickCount64();
break;
}
}
}
}
}
Необходимые зависимости:
bCrosshair — проверка что прицел активен (режим камеры 53 или 7)
pKeyHook->g_GameKeyState[BUTTON_CIRCLE] — симуляция нажатия кнопки стрельбы
CWorld::ProcessLineOfSight — raycast из GTA SA
Utils::getBonePosition — получение позиции кости
TheCamera — глобальный объект камеры GTA
pSAMP — обёртка над SAMP
для компиляции тебе надо
plugin-sdk
plugin-sdk:
Код:
// Камера
CCamera TheCamera; // 0xB6F028
TheCamera.m_aCams[0].m_nMode // режим камеры
TheCamera.m_aCams[0].m_vecFront // направление камеры
TheCamera.GetGameCamPosition() // позиция камеры
TheCamera.Find3rdPersonCamTargetVector() // вектор прицеливания
// Мир
CWorld::ProcessLineOfSight() // raycast
// Игрок
FindPlayerPed() // локальный пед
CPed, CEntity // структуры
CPools::GetPed() // получить пед по хендлу
SAMP SDK:
Код:
// Структуры SAMP
stSAMP
*
pSAMP
;
pSAMP
->
getPlayers
(
)
->
pLocalPlayer
// локальный игрок
pSAMP
->
getPlayers
(
)
->
pRemotePlayer
[
i
]
// удалённые игроки
pSAMP
->
isPlayerStreamed
(
i
)
// проверка стрима
pSAMP
->
getPlayerColor
(
i
)
// цвет игрока (для тимчека)
// Данные игрока
byteCurrentWeapon
// текущее оружие
pPlayerData
->
pSAMP_Actor
->
ulGTAEntityHandle
// хендл педа
pPlayerData
->
iAFKState
// AFK статус
Утилиты (можно написать свои):
Код:
// Получить позицию кости
void
getBonePosition
(
CPed
*
pPed
,
ePedBones bone
,
CVector
*
out
)
{
RwV3d rwPos
;
pPed
->
GetBonePosition
(
rwPos
,
bone
,
false
)
;
out
->
x
=
rwPos
.
x
;
out
->
y
=
rwPos
.
y
;
out
->
z
=
rwPos
.
z
;
}
// Дистанция между векторами
float
vect3_dist
(
float
*
v1
,
float
*
v2
)
{
float
dx
=
v1
[
0
]
-
v2
[
0
]
;
float
dy
=
v1
[
1
]
-
v2
[
1
]
;
float
dz
=
v1
[
2
]
-
v2
[
2
]
;
return
sqrtf
(
dx
*
dx
+
dy
*
dy
+
dz
*
dz
)
;
}
4. Симуляция нажатия клавиш:
Код:
// Вариант 1: Хук на ввод
pKeyHook
->
g_GameKeyState
[
BUTTON_CIRCLE
]
=
{
0xFF
,
true
}
;
// Вариант 2: Напрямую в память GTA
*
(
BYTE
*
)
0xB73458
=
255
;
// fire key state
// Вариант 3: SendInput / mouse_event
mouse_event
(
MOUSEEVENTF_LEFTDOWN
,
0
,
0
,
0
,
0
)
;
mouse_event
(
MOUSEEVENTF_LEFTUP
,
0
,
0
,
0
,
0
)
;
5. Массив дальности оружия:
Код:
float fWeaponRange[47] = {
0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, // 0-9 (melee)
0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, 0.f, // 10-19
0.f, 0.f, 35.f, 35.f, 35.f, 35.f, 35.f, 35.f, 35.f, 35.f, // 20-29 (pistols, smg)
45.f, 45.f, 35.f, 100.f, 300.f, 0.f, 0.f, 0.f, 0.f, 0.f, // 30-39 (rifles, sniper)
// ...
};
Минимальный standalone пример::
Код:
void
Triggerbot
(
)
{
// Проверка прицела
int
mode
=
*
(
int
*
)
(
0xB6F028
+
0x174
)
;
// TheCamera.m_aCams[0].m_nMode
if
(
mode
!=
53
&&
mode
!=
7
)
return
;
// Raycast
CVector camPos
=
*
(
CVector
*
)
(
0xB6F028
+
0x190
)
;
CVector camFront
=
*
(
CVector
*
)
(
0xB6F028
+
0x140
)
;
CVector target
=
camPos
+
camFront
*
100.f
;
CColPoint col
;
CEntity
*
entity
=
nullptr
;
if
(
CWorld
::
ProcessLineOfSight
(
camPos
,
target
,
col
,
entity
,
true
,
true
,
true
,
true
,
true
,
true
,
false
,
true
)
)
{
if
(
entity
&&
entity
->
m_nType
==
3
)
{
// ENTITY_TYPE_PED
// Проверить что это враг через SAMP...
mouse_event
(
MOUSEEVENTF_LEFTDOWN
|
MOUSEEVENTF_LEFTUP
,
0
,
0
,
0
,
0
)
;
}
}
}
|