Updated offsets and fixed overlay issues due to the memory class not been able to get the hwnd correctly when starting the game
This commit is contained in:
@@ -2,10 +2,6 @@
|
||||
|
||||
Simple external esp using gdi overlay to render esp boxes on top of cs2 highlighting your enemies and teammates including their health, name and health number. If you want to check out discord overlay rendering check [discord-overlay-esp](https://github.com/IMXNOOBX/cs2-external-esp/tree/discord-overlay)
|
||||
|
||||
## ❗️Notice
|
||||
|
||||
cs2 just updated and the offsets are no longer working, you can update them manually and create a pull request or wait until its updated
|
||||
|
||||
## Video Showcase
|
||||
|
||||
[](https://youtu.be/SV_lddIxQ5w)
|
||||
|
||||
@@ -4,4 +4,6 @@
|
||||
namespace g {
|
||||
inline HDC hdcBuffer = NULL;
|
||||
inline HBITMAP hbmBuffer = NULL;
|
||||
|
||||
RECT gameBounds;
|
||||
}
|
||||
|
||||
@@ -2,8 +2,7 @@
|
||||
#include <numbers>
|
||||
#include <cmath>
|
||||
|
||||
int screen_x = GetSystemMetrics(SM_CXSCREEN);
|
||||
int screen_y = GetSystemMetrics(SM_CYSCREEN);
|
||||
#include "globals.hpp"
|
||||
|
||||
struct view_matrix_t {
|
||||
float* operator[ ](int index) {
|
||||
@@ -91,11 +90,11 @@ struct Vector3
|
||||
_x *= inv_w;
|
||||
_y *= inv_w;
|
||||
|
||||
float x = screen_x * .5f;
|
||||
float y = screen_y * .5f;
|
||||
float x = g::gameBounds.right * .5f;
|
||||
float y = g::gameBounds.bottom * .5f;
|
||||
|
||||
x += 0.5f * _x * screen_x + 0.5f;
|
||||
y -= 0.5f * _y * screen_y + 0.5f;
|
||||
x += 0.5f * _x * g::gameBounds.right + 0.5f;
|
||||
y -= 0.5f * _y * g::gameBounds.bottom + 0.5f;
|
||||
|
||||
return { x, y, w };
|
||||
}
|
||||
|
||||
@@ -3,11 +3,13 @@
|
||||
#include "classes/globals.hpp"
|
||||
#include "../classes/render.hpp"
|
||||
|
||||
#define dwLocalPlayer 0x1713348
|
||||
#define dwEntityList 0x1679C38
|
||||
// last offset update 9/5/2023
|
||||
#define dwLocalPlayer 0x1675770
|
||||
#define dwEntityList 0x167ABA8
|
||||
#define dwViewMatrix 0x1714C70
|
||||
|
||||
#define dwPawnHealth 0x808
|
||||
#define dwPlayerPawn 0x5dc
|
||||
#define dwViewMatrix 0x1713CF0
|
||||
#define dwSanitizedName 0x720
|
||||
#define m_iTeamNum 0x3bf
|
||||
#define m_vecOrigin 0x12AC
|
||||
|
||||
@@ -7,8 +7,7 @@
|
||||
#include "classes/vector.hpp"
|
||||
#include "hacks/hack.hpp"
|
||||
#include "classes/globals.hpp"
|
||||
|
||||
// https://www.unknowncheats.me/forum/3846642-post734.html
|
||||
#include "classes/render.hpp"
|
||||
|
||||
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
@@ -17,7 +16,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
case WM_CREATE:
|
||||
{
|
||||
g::hdcBuffer = CreateCompatibleDC(NULL);
|
||||
g::hbmBuffer = CreateCompatibleBitmap(GetDC(hWnd), screen_x, screen_y);
|
||||
g::hbmBuffer = CreateCompatibleBitmap(GetDC(hWnd), g::gameBounds.right, g::gameBounds.bottom);
|
||||
SelectObject(g::hdcBuffer, g::hbmBuffer);
|
||||
|
||||
SetWindowLong(hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED);
|
||||
@@ -39,10 +38,11 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
|
||||
|
||||
if (GetForegroundWindow() == hack::process->hwnd_) {
|
||||
//render::RenderText(g::hdcBuffer, 10, 10, "cs2 | ESP", RGB(75, 175, 175), 15);
|
||||
hack::loop();
|
||||
}
|
||||
|
||||
BitBlt(hdc, 0, 0, screen_x, screen_y, g::hdcBuffer, 0, 0, SRCCOPY);
|
||||
BitBlt(hdc, 0, 0, g::gameBounds.right, g::gameBounds.bottom, g::hdcBuffer, 0, 0, SRCCOPY);
|
||||
|
||||
EndPaint(hWnd, &ps);
|
||||
InvalidateRect(hWnd, NULL, TRUE);
|
||||
@@ -76,10 +76,16 @@ int main() {
|
||||
hack::base_module = hack::process->GetModule("client.dll");
|
||||
if (hack::base_module.base == 0) {
|
||||
std::this_thread::sleep_for(std::chrono::seconds(1));
|
||||
std::cout << "[cs2] Failed to find module client.dll" << std::endl;
|
||||
std::cout << "[cs2] Failed to find module client.dll, waiting for the game to load it..." << std::endl;
|
||||
}
|
||||
} while (hack::base_module.base == 0);
|
||||
|
||||
std::cout << "[overlay] Waiting to focus game to create the overlay..." << std::endl;
|
||||
while (GetForegroundWindow() != hack::process->hwnd_) {
|
||||
std::this_thread::sleep_for(std::chrono::seconds(1));
|
||||
hack::process->UpdateHWND();
|
||||
ShowWindow(hack::process->hwnd_, TRUE);
|
||||
}
|
||||
std::cout << "[overlay] Creating window overlay..." << std::endl;
|
||||
|
||||
WNDCLASSEXA wc = { 0 };
|
||||
@@ -93,20 +99,19 @@ int main() {
|
||||
|
||||
RegisterClassExA(&wc);
|
||||
|
||||
RECT gameBounds;
|
||||
GetClientRect(hack::process->hwnd_, &gameBounds);
|
||||
GetClientRect(hack::process->hwnd_, &g::gameBounds);
|
||||
|
||||
// Create the window
|
||||
HINSTANCE hInstance = NULL;
|
||||
HWND hWnd = CreateWindowExA(WS_EX_TRANSPARENT | WS_EX_TOPMOST | WS_EX_LAYERED | WS_EX_TOOLWINDOW, " ", "cs2-external-esp", WS_POPUP,
|
||||
gameBounds.left, gameBounds.top, gameBounds.right - gameBounds.left, gameBounds.bottom + gameBounds.left, NULL, NULL, hInstance, NULL); // NULL, NULL);
|
||||
g::gameBounds.left, g::gameBounds.top, g::gameBounds.right - g::gameBounds.left, g::gameBounds.bottom + g::gameBounds.left, NULL, NULL, hInstance, NULL); // NULL, NULL);
|
||||
|
||||
if (hWnd == NULL)
|
||||
return 0;
|
||||
|
||||
SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
|
||||
ShowWindow(hWnd, TRUE);
|
||||
SetActiveWindow(hack::process->hwnd_);
|
||||
//SetActiveWindow(hack::process->hwnd_);
|
||||
|
||||
// Message loop
|
||||
MSG msg;
|
||||
@@ -120,6 +125,8 @@ int main() {
|
||||
DeleteDC(g::hdcBuffer);
|
||||
DeleteObject(g::hbmBuffer);
|
||||
|
||||
DestroyWindow(hWnd);
|
||||
|
||||
std::cout << "[cs2] Deataching from process" << std::endl;
|
||||
hack::process->Close();
|
||||
|
||||
|
||||
@@ -108,6 +108,12 @@ bool pProcess::AttachWindow(const char* WindowName)
|
||||
return false;
|
||||
}
|
||||
|
||||
bool pProcess::UpdateHWND()
|
||||
{
|
||||
hwnd_ = this->GetWindowHandleFromProcessId(pid_);
|
||||
return hwnd_ == nullptr;
|
||||
}
|
||||
|
||||
ProcessModule pProcess::GetModule(const char* lModule)
|
||||
{
|
||||
std::wstring wideModule;
|
||||
|
||||
@@ -25,6 +25,7 @@ public:
|
||||
public:
|
||||
bool AttachProcess(const char* process_name);
|
||||
bool AttachWindow(const char* window_name);
|
||||
bool UpdateHWND();
|
||||
void Close();
|
||||
|
||||
public:
|
||||
|
||||
Reference in New Issue
Block a user