Aimbot bleibt bei einem Ziel hängen

DrMax

Hack User
22 Jun 2015
75
12
#1
Moin, arbeite gerade an einem Aimbot der das Ziel auswählen soll, welches am nächsten an mir dran ist.
Die Externen Funktionen funktionieren alle, also muss es an der Logik liegen, ich weiß aber nicht wo.
Er sagt mir immer Gegner 13 wäre am nächsten was aber nicht stimmt.
Code:
int m_Target=-1;
float  m_Best=9999;
void aimbotFindTarget()
{   
    while(true)
    {
        for (int i = 1; i <= PlayerAmount; i++)
        {
            Vector toEnemy = GetPointVector(i);

            float toEnemyDist = langVec(toEnemy);

            if (toEnemyDist < m_Best)
            {
                m_Best = toEnemyDist;
                m_Target = i;
            }
        }
        Sleep(5);
    }
}
Vector GetPointVector(int ent)
{
    int currentEntity = mem.Read<int>(Client + EntityBaseAddress + (ent*EntityLoopDist));
    //Abhängig von ent
    Vector currentEntityPos;
    currentEntityPos.x = mem.Read<float>(currentEntity + posX);
    currentEntityPos.y = mem.Read<float>(currentEntity + posY);
    currentEntityPos.z = mem.Read<float>(currentEntity + posZ);

    //Immer gleich
    Vector currentPlayerPos;
    currentPlayerPos.x = mem.Read<float>(LocalPlayer + posX);
    currentPlayerPos.y = mem.Read<float>(LocalPlayer + posY);
    currentPlayerPos.z = mem.Read<float>(LocalPlayer + posZ);

    Vector toEnemy = subVec(currentEntityPos, currentPlayerPos);
    
    return toEnemy;
}
Falls mir jemand helfen kann wäre ich sehr dankbar!
Viele Grüße
 

ShynoX

Advanced Member
13 Jan 2014
908
1,089
#3
^ siehe über mir + tue dir und deiner Performance einen Gefallen indem du nicht 3x pro Player nen Read auf float machst, sondern direkt nen 3D-Vector (12 bytes) aus dem Speicher liest. (XYZ Koordinaten liegen doch im Speicher direkt nebeneinander oder? Ansonsten hau paddings rein.)

(kp was deine Vector Struct da ist, aber folgendes sollte es definitv tun: )
Code:
struct 3dVector {
    float x; // 4 bytes
    float y; // 8 bytes
    float z; // 12 bytes
}
und dann einfach aus dem Speicher liest mit
3dVector currentEntityPos = mem.Read<3dVector>(currentEntity + posX);

Sparst dir dadurch 66% an Operationen.

(Hoffe hab noch alles richtig im Kopf und laber gerade keinen Unsinn.)
 
Last edited:

DrMax

Hack User
22 Jun 2015
75
12
#4
du setzt m_Best nicht zurück
Danke, hat das Problem mit dem Hängen gelöst!

^ siehe über mir + tue dir und deiner Performance einen Gefallen indem du nicht 3x pro Player nen Read auf float machst, sondern direkt nen 3D-Vector (12 bytes) aus dem Speicher liest. (XYZ Koordinaten liegen doch im Speicher direkt nebeneinander oder? Ansonsten hau paddings rein.)

(kp was deine Vector Struct da ist, aber folgendes sollte es definitv tun: )
Code:
struct 3dVector {
    float x; // 4 bytes
    float y; // 8 bytes
    float z; // 12 bytes
}
und dann einfach aus dem Speicher liest mit
3dVector currentEntityPos = mem.Read<3dVector>(currentEntity + posX);

Sparst dir dadurch 66% an Operationen.

(Hoffe hab noch alles richtig im Kopf und laber gerade keinen Unsinn.)
Danke für den Tipp, macht Sinn was du sagt, ich probier es mal aus. Mehr Performance kann nie schaden :grin:
 

Sephirot

Well-Known Member
2 Jun 2015
1,751
1,265
#5
Würde eher berechnen wer näher an deinem Crosshair ist und nicht wer von der Distanz her näher ist.
 

ArzZt

Member
24 Mar 2016
86
48
#6
Es reicht auch deine Pos einmal auszulesen und nicht in jedem Iterationsschritt. Und wie bereits gesagt solltest du die Distance zum Crosshair nehmen, sonst bekommst paar sicke Moves.
 

rn_

I'm not online, that's just my bot.
7 Jan 2011
5,677
11,051
#7
In C++ wurde etwas hinzugefügt, was sich Klassen nennt. Kann dir nur empfehlen dir dies anzueignen, da z.B. bei den Players eine Klasse enorm viel Code sparen würde und auch die Anwendung im ganzen Code wesentlich besser aussieht.
 
Likes: arbian