Прыгают ESP Боксы

Пользователь
Статус
Оффлайн
Регистрация
4 Янв 2018
Сообщения
100
Реакции[?]
32
Поинты[?]
0
Учусь писать читы (Python), начал с CSS. Ищу все оффсеты сам.
Затуп с ESP Боксами, они как бы прыгают и появляются там где не должны появляться.
Причём периодически боксы отрисовываются и тут же исчезают, даже если координата w уходит в отрицательное значение.
Тестил как tkinter, так и pygame, трабла не уходит.
Игра: CSS
Python:
import pymem
import pymem.process
import pygame
import win32api
import win32con
import win32gui
from threading import Thread
import tkinter


class CSSHack:

    def __init__(self):
        
        #ProcName
        self.pm = pymem.Pymem("hl2.exe")

        #Target window name
        self.TargetWindowName = "Counter-Strike Source"

        #Overlay name
        self.OverlayName = "Overlay"

        #Offsets
        self.server_dll = pymem.process.module_from_name(self.pm.process_handle, "server.dll").lpBaseOfDll #int
        self.engine_dll = pymem.process.module_from_name(self.pm.process_handle, "engine.dll").lpBaseOfDll #int
        self.BaseAddr = self.server_dll + 0x00562D7C #int
        self.LocalPlayer = self.pm.read_int(self.BaseAddr) #int, 0x10 bytes between players
        self.Health = 0x88 #int
        self.cord_x = 0x01C8 #float
        self.cord_y = 0x01CC #float
        self.cord_z = 0x01D0 #float
        self.recoilx = 0x07E0 #float
        self.recoily = 0x07E4 #float
        self.isJumping = 0x07D4 #int, if != 0 == jumping
        self.teamNumber = 0x01C0 #int, [2- t, 3 - ct]
        self.vMatrix = self.engine_dll + 0x4CF20C #float

        #window init
        self.root = tkinter.Tk()

    def CreateOverlay(self, posx, posy, width, height):

        self.root.overrideredirect(True)

        self.root.wm_attributes("-topmost", True)
        self.root.wm_attributes("-toolwindow", True)
        self.root.wm_attributes("-disabled", True)
        self.root.wm_attributes("-transparentcolor", "white")

        self.root.title(self.OverlayName)

        self.root.geometry(f"{width}x{height}")
        self.root.geometry(f"+{posx}+{posy}")

        canvas = tkinter.Canvas(self.root, width=width, height=height, bg='white')
        canvas.pack()

        return canvas
        

    def GetTargetWindowPos(self): # Returns tuple, where [0] - posx, [1] - posy, [2] - width, [3] - height
        target_hwnd = win32gui.FindWindow(0, self.TargetWindowName)
        if target_hwnd:
            return win32gui.GetWindowRect(target_hwnd)

    def World2Screen(self, x, y, z, width, height):
        
        Matrix_List = [self.pm.read_float(self.vMatrix + 0x0),
            self.pm.read_float(self.vMatrix + 0x4),
            self.pm.read_float(self.vMatrix + 0x8),
            self.pm.read_float(self.vMatrix + 0xC),
            self.pm.read_float(self.vMatrix + 0x10),
            self.pm.read_float(self.vMatrix + 0x14),
            self.pm.read_float(self.vMatrix + 0x18),
            self.pm.read_float(self.vMatrix + 0x1C),
            self.pm.read_float(self.vMatrix + 0x20),
            self.pm.read_float(self.vMatrix + 0x24),
            self.pm.read_float(self.vMatrix + 0x28),
            self.pm.read_float(self.vMatrix + 0x2C),
            self.pm.read_float(self.vMatrix + 0x30),
            self.pm.read_float(self.vMatrix + 0x34),
            self.pm.read_float(self.vMatrix + 0x38),
            self.pm.read_float(self.vMatrix + 0x3C)
        ]

        posx = x * Matrix_List[0] + y * Matrix_List[1] + z * Matrix_List[2] + Matrix_List[3]
        posy = x * Matrix_List[4] + y * Matrix_List[5] + z * Matrix_List[6] + Matrix_List[7]
        posz = x * Matrix_List[8] + y * Matrix_List[9] + z * Matrix_List[10] + Matrix_List[11]
        posw = x * Matrix_List[12] + y * Matrix_List[13] + z * Matrix_List[14] + Matrix_List[15]

        NDCx = posx / posw
        NDCy = posy / posw
        NDCz = posz / posw

        screenx = (width / 2 * NDCx) + (NDCx + width / 2)
        screeny = -(height / 2 * NDCy) + (NDCy + height / 2)

        return screenx, screeny, posw

    def GetEntityPos(self):
        EntityPos_List = []

        for i in range(1, 32): # Starts from 1 because we want skip us

            if self.pm.read_int(self.BaseAddr + i * 0x10) != 0:

                x = self.pm.read_float(self.pm.read_int(self.BaseAddr + i * 0x10) + self.cord_x)
                y = self.pm.read_float(self.pm.read_int(self.BaseAddr + i * 0x10) + self.cord_y)
                z = self.pm.read_float(self.pm.read_int(self.BaseAddr + i * 0x10) + self.cord_z)

                EntityPos_List.append([x,y,z])

        return EntityPos_List

    # Below cheat functions

    def ESP(self, width, height, canvas):

        c = canvas

        while True:
            EntityPos = self.GetEntityPos()
            EntityPos2D = []

            for i in range(len(EntityPos)):
                EntityPos2D.append(self.World2Screen(EntityPos[i][0], EntityPos[i][1], EntityPos[i][2], width, height))
        
            for i in range(len(EntityPos2D)):
                if EntityPos2D[i][2] > 0.01:
                    c.create_rectangle(EntityPos2D[i][0]- 30, EntityPos2D[i][1]- 50, EntityPos2D[i][0], EntityPos2D[i][1], outline="red")

            self.root.update()
            self.root.update_idletasks()
            canvas.delete("all")

    def BHop(self):
        pass

    def RecoilControl(self, value):
        pass

    def AimBot(self):
        pass


def main():
    cheat = CSSHack()

    GameWindowInfo = cheat.GetTargetWindowPos()

    WindowPosx = GameWindowInfo[0]
    WindowPosy = GameWindowInfo[1]
    width = GameWindowInfo[2] - GameWindowInfo[0]
    height = GameWindowInfo[3] - GameWindowInfo[1]

    canvas = cheat.CreateOverlay(WindowPosx, WindowPosy, width, height)

    # esp = Thread(target=cheat.ESP, args=(width, height, canvas))
    # esp.start()
    cheat.ESP(width, height, canvas)


if __name__ == "__main__":
    main()
Надеюсь на помощь знающих людей.
 
Пользователь
Статус
Оффлайн
Регистрация
17 Мар 2021
Сообщения
400
Реакции[?]
102
Поинты[?]
0
Пользователь
Статус
Оффлайн
Регистрация
4 Янв 2018
Сообщения
100
Реакции[?]
32
Поинты[?]
0
эти функций дико не точные, может проблема в этом
Забей, сравнил отрисовку со значениями матрицы. Матрица прыгает - боксы отрисовываются. Под прыгает я подразумеваю что матрица сама изменяет 4 значения из 16 и моментально возвращает исходные значения. Причём альтернатив этой матрицы я найти не могу, все либо прыгают либо не полные.
/del
 
Пользователь
Статус
Оффлайн
Регистрация
23 Окт 2020
Сообщения
98
Реакции[?]
46
Поинты[?]
0
На беглый взгляд вроде все норм вроде.
Но мне кажется функция ворлд2скрин не правильная.
C++:
bool WorldToScreen(Vec3 pos, Vec2 &screen, float matrix[16], int windowWidth, int windowHeight) // 3D to 2D

{

    //Matrix-vector Product, multiplying world(eye) coordinates by projection matrix = clipCoords

    Vec4 clipCoords;

    clipCoords.x = pos.x*matrix[0] + pos.y*matrix[4] + pos.z*matrix[8] + matrix[12];

    clipCoords.y = pos.x*matrix[1] + pos.y*matrix[5] + pos.z*matrix[9] + matrix[13];

    clipCoords.z = pos.x*matrix[2] + pos.y*matrix[6] + pos.z*matrix[10] + matrix[14];

    clipCoords.w = pos.x*matrix[3] + pos.y*matrix[7] + pos.z*matrix[11] + matrix[15];



    if (clipCoords.w < 0.1f)

        return false;



    //perspective division, dividing by clip.W = Normalized Device Coordinates

    Vec3 NDC;

    NDC.x = clipCoords.x / clipCoords.w;

    NDC.y = clipCoords.y / clipCoords.w;

    NDC.z = clipCoords.z / clipCoords.w;



    //Transform to window coordinates

    screen.x = (windowWidth / 2 * NDC.x) + (NDC.x + windowWidth / 2);

    screen.y = -(windowHeight / 2 * NDC.y) + (NDC.y + windowHeight / 2);

    return true;

}
Код:
if (clipCoords.w < 0.1f)

        return false;
Добавь ЭТО.
Если не помогло то попробуй нарисовать есп на 1 бота для начала если все норм, потом уже структуру создавай.
Вообще количество ботов соответствует количеству боксов?
 
Пользователь
Статус
Оффлайн
Регистрация
4 Янв 2018
Сообщения
100
Реакции[?]
32
Поинты[?]
0
На беглый взгляд вроде все норм вроде.
Но мне кажется функция ворлд2скрин не правильная.
C++:
bool WorldToScreen(Vec3 pos, Vec2 &screen, float matrix[16], int windowWidth, int windowHeight) // 3D to 2D

{

    //Matrix-vector Product, multiplying world(eye) coordinates by projection matrix = clipCoords

    Vec4 clipCoords;

    clipCoords.x = pos.x*matrix[0] + pos.y*matrix[4] + pos.z*matrix[8] + matrix[12];

    clipCoords.y = pos.x*matrix[1] + pos.y*matrix[5] + pos.z*matrix[9] + matrix[13];

    clipCoords.z = pos.x*matrix[2] + pos.y*matrix[6] + pos.z*matrix[10] + matrix[14];

    clipCoords.w = pos.x*matrix[3] + pos.y*matrix[7] + pos.z*matrix[11] + matrix[15];



    if (clipCoords.w < 0.1f)

        return false;



    //perspective division, dividing by clip.W = Normalized Device Coordinates

    Vec3 NDC;

    NDC.x = clipCoords.x / clipCoords.w;

    NDC.y = clipCoords.y / clipCoords.w;

    NDC.z = clipCoords.z / clipCoords.w;



    //Transform to window coordinates

    screen.x = (windowWidth / 2 * NDC.x) + (NDC.x + windowWidth / 2);

    screen.y = -(windowHeight / 2 * NDC.y) + (NDC.y + windowHeight / 2);

    return true;

}
Код:
if (clipCoords.w < 0.1f)

        return false;
Добавь ЭТО.
Если не помогло то попробуй нарисовать есп на 1 бота для начала если все норм, потом уже структуру создавай.
Вообще количество ботов соответствует количеству боксов?
Да соответствует. Сейчас попробую
На беглый взгляд вроде все норм вроде.
Но мне кажется функция ворлд2скрин не правильная.
C++:
bool WorldToScreen(Vec3 pos, Vec2 &screen, float matrix[16], int windowWidth, int windowHeight) // 3D to 2D

{

    //Matrix-vector Product, multiplying world(eye) coordinates by projection matrix = clipCoords

    Vec4 clipCoords;

    clipCoords.x = pos.x*matrix[0] + pos.y*matrix[4] + pos.z*matrix[8] + matrix[12];

    clipCoords.y = pos.x*matrix[1] + pos.y*matrix[5] + pos.z*matrix[9] + matrix[13];

    clipCoords.z = pos.x*matrix[2] + pos.y*matrix[6] + pos.z*matrix[10] + matrix[14];

    clipCoords.w = pos.x*matrix[3] + pos.y*matrix[7] + pos.z*matrix[11] + matrix[15];



    if (clipCoords.w < 0.1f)

        return false;



    //perspective division, dividing by clip.W = Normalized Device Coordinates

    Vec3 NDC;

    NDC.x = clipCoords.x / clipCoords.w;

    NDC.y = clipCoords.y / clipCoords.w;

    NDC.z = clipCoords.z / clipCoords.w;



    //Transform to window coordinates

    screen.x = (windowWidth / 2 * NDC.x) + (NDC.x + windowWidth / 2);

    screen.y = -(windowHeight / 2 * NDC.y) + (NDC.y + windowHeight / 2);

    return true;

}
Код:
if (clipCoords.w < 0.1f)

        return false;
Добавь ЭТО.
Если не помогло то попробуй нарисовать есп на 1 бота для начала если все норм, потом уже структуру создавай.
Вообще количество ботов соответствует количеству боксов?
Эта проверка идёт тут. EntityPos2D[2] это w координата
Python:
 if EntityPos2D[i][2] > 0.01:
                    c.create_rectangle(EntityPos2D[i][0]- 30, EntityPos2D[i][1]- 50, EntityPos2D[i][0], EntityPos2D[i][1], outline="red")
Причём я заметил одну фишку, что если в области зрения находятся все игроки, то матрицу не касоёбит, но если хоть один игрок не попадает в область зрения, то те самые 4 значения начинают прыгать. CSS к слову v34
 
Последнее редактирование:
Пользователь
Статус
Оффлайн
Регистрация
23 Окт 2020
Сообщения
98
Реакции[?]
46
Поинты[?]
0
Попробуй запустится с 1 ботом,и выводи значения на консоль. Проверяей если бот за экраном не рисуй бокс. На крайняк попробуй игру ассулт куб.
 
Пользователь
Статус
Оффлайн
Регистрация
4 Янв 2018
Сообщения
100
Реакции[?]
32
Поинты[?]
0
Попробуй запустится с 1 ботом,и выводи значения на консоль. Проверяей если бот за экраном не рисуй бокс. На крайняк попробуй игру ассулт куб.
Всё это уже смотрел овер 10000 раз. Завтра просто новый оффсет матрицы попробую найти. Только уже не через CE а через иду
 
Сверху Снизу