Гайд API SF | Урок 7 - Aimbot

CleanLegend

Известный
Автор темы
Всефорумный модератор
478
935
Привет, сегодня напишем простой аимбот на SF.​
Алгоритм:
- найти id игрока
- получить координаты игрока
- рассчитать угол поворота
- повернуть камеру на этот угол


Получаем id и координаты игрока по зеленому треугольнику:
C++:
Cvector enpos;
int enid = SF->getSAMP()->getPlayers()->pLocalPlayer->sAimingAtPid;
if (enid != 65535)
{
enpos.fX = SF->getSAMP()->getPlayers()->pRemotePlayer[enid]->pPlayerData->onFootData.fPosition[0];
enpos.fY = SF->getSAMP()->getPlayers()->pRemotePlayer[enid]->pPlayerData->onFootData.fPosition[1];
enpos.fZ = SF->getSAMP()->getPlayers()->pRemotePlayer[enid]->pPlayerData->onFootData.fPosition[2];
}
второй вариант получения id игрока с помощью этой функции - https://blast.hk/threads/10970/#post-124093
C++:
int enid = GetPlayerTarget(50);
if (enid != -1)
{
enpos.fX = SF->getSAMP()->getPlayers()->pRemotePlayer[enid]->pPlayerData->onFootData.fPosition[0];
enpos.fY = SF->getSAMP()->getPlayers()->pRemotePlayer[enid]->pPlayerData->onFootData.fPosition[1];
enpos.fZ = SF->getSAMP()->getPlayers()->pRemotePlayer[enid]->pPlayerData->onFootData.fPosition[2];
}
Получаем свои координаты и рассчитываем угол:
C++:
CCamera *pCamera = GAME->GetCamera();
mypos = *pCamera->GetCam(pCamera->GetActiveCam())->GetSource();
vector = mypos - enpos;
float AngleX = atan2f(vector.fY, -vector.fX) - M_PI / 2;
Поворачиваем камеру:
C++:
*(float*)0xB6F258 = -(AngleX - M_PI / 2);
Поворот с учетом смещения прицела(взято из собейта - https://github.com/BlastHackNet/mod_s0beit_sa/blob/master/src/cheat_actor.cpp#L173):
C++:
float    *crosshairOffset = (float *)0xB6EC10;
 float mult = tan(pCamera->GetCam(pCamera->GetActiveCam())->GetFOV() * 0.5f * 0.017453292f);
 float fx = M_PI - atan2(1.0f, mult * (crosshairOffset[1] - 0.5f + crosshairOffset[1] - 0.5f));
Поворачиваем камеру:
C++:
*(float*)0xB6F258 = -(AngleX - fx );

полный листинг:
C++:
void Aimbot()
{
    CVector mypos;
    CVector enpos;
    CVector vector;
    int enid = SF->getSAMP()->getPlayers()->pLocalPlayer->sAimingAtPid;
    if (enid != 65535)
    {
        enpos.fX = SF->getSAMP()->getPlayers()->pRemotePlayer[enid]->pPlayerData->onFootData.fPosition[0];
        enpos.fY = SF->getSAMP()->getPlayers()->pRemotePlayer[enid]->pPlayerData->onFootData.fPosition[1];
        enpos.fZ = SF->getSAMP()->getPlayers()->pRemotePlayer[enid]->pPlayerData->onFootData.fPosition[2];
        CCamera *pCamera = GAME->GetCamera();
        mypos = *pCamera->GetCam(pCamera->GetActiveCam())->GetSource();
        vector = mypos - enpos;
       
        float    *crosshairOffset = (float *)0xB6EC10;
        float mult = tan(pCamera->GetCam(pCamera->GetActiveCam())->GetFOV() * 0.5f * 0.017453292f);
        float fx = M_PI - atan2(1.0f, mult * (crosshairOffset[1] - 0.5f + crosshairOffset[1] - 0.5f));
       
        float AngleX = atan2f(vector.fY, -vector.fX) - M_PI / 2;

        *(float*)0xB6F258 = -(AngleX - fx);
    }
}
 

AnWu

Известный
Всефорумный модератор
4,777
5,400
1501836441154977104.jpg
Лучше бы показал как к Plugin SDK подрубить самп, а не аим делать. Хотя полезнич.
 

Natami

Участник
377
26
Попробовал 2-ой вариант:
error C3861: GetPlayerTarget: идентификатор не найден

В чем проблема?