Перейти к содержанию

Рекомендуемые сообщения

Подробности может? Рисуешь на оверлее или используя хук D3D_Present или d3d_swapchain?

Просто у нас проблема с кадрами, на форуме до сентября экстрасенсы в отпуске.

Изменено пользователем partoftheworlD
Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, XenonH сказал:

Как?

Если не знаешь как, то иди в тему платные запросы, нет денег, вылаживай весь свой код сюда,и тебе подскажут тему для ознакомления или ошибки в коде .

 

2 часа назад, XenonH сказал:

Не шарю.

Поисковая система в помощь.

 

P.S. Модераторы закройте тему, если не выложить код.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, keng сказал:

Не-не-не, стоп! Почему оверлей не будет работать в полноэкранном режиме? Там никаких проблем не должно быть.

Возможно при переходе из borderless в fullscreen пересоздается девайс и поэтому крашится)

Ссылка на комментарий
Поделиться на другие сайты

А чем не устраивает использовать режим оконный без рамок?
 

19 минут назад, elvis66666 сказал:

Возможно при переходе из borderless в fullscreen пересоздается девайс

Может игра в полноэкранном режиме просто перекрывает оверлей? Ведь оверлей это обычное прозрачное  окно.

Ссылка на комментарий
Поделиться на другие сайты

42 минуты назад, partoftheworlD сказал:

А чем не устраивает использовать режим оконный без рамок?
 

Может игра в полноэкранном режиме просто перекрывает оверлей? Ведь оверлей это обычное прозрачное  окно.

если идет речь об external overlay , тогда да, безусловно.

но если internal тогда нет, там рисуешь напрямую через буфер, в том же потоке что и игра.

Ссылка на комментарий
Поделиться на другие сайты

Скрытый текст

using System;
using System.Drawing;
using System.Diagnostics;
using DirectXOverlayWindow;
using System.Numerics;

namespace ESP_Box
{
    class Program
    {
        private static OverlayWindow window;
        private static Matrix4x4 VMatrix = Matrix4x4.Identity;

        private static int bClient;

        private static int espFont = -1;
        private static int redBrush = -1;
        private static int greenBrush = -1;

        private static Memory mem;

        internal static ScreenVector WorldToScreen(float x, float y, float z)
        {
            float w;
            float sx;
            float sy;

            sx = VMatrix.M11 * x +
                 VMatrix.M12 * y +
                 VMatrix.M13 * z +
                 VMatrix.M14;

            sy = VMatrix.M21 * x +
                 VMatrix.M22 * y +
                 VMatrix.M23 * z +
                 VMatrix.M24;


            w = VMatrix.M41 * x +
                VMatrix.M42 * y +
                VMatrix.M43 * z +
                VMatrix.M44;

            if (w < 0.01f)
                return new ScreenVector()
                {
                    Result = false,
                    X = 0,
                    Y = 0
                };

            float invw = 1f / w;
            sx *= invw;
            sy *= invw;

            int width = window.Width;
            int height = window.Height;

            float xt = width / 2;
            float yt = height / 2;

            xt += 0.5f * sx * width + 0.5f;
            yt -= 0.5f * sy * height + 0.5f;

            sx = xt;
            sy = yt;


            return new ScreenVector()
            {
                Result = true,
                X = sx,
                Y = sy
            };
        }

        static void Main()
        {
            while (!GetDll()) { }

            Console.WriteLine("ESP ON");

            while (true)
            {
                window.Graphics.BeginScene();
                window.Graphics.ClearScene();

                int scx = window.Width / 2 - 1;
                int scy = window.Height / 2 + 11;

                window.Graphics.DrawBox3D(scx, scy, 3, 3, 1, 1, redBrush, redBrush);

                int PlayerBase = mem.Read<int>(bClient + Offsets.m_dwLocalPlayer);
                int LocalTeam = mem.Read<int>(PlayerBase + Offsets.m_iTeamNum);
                int LocalHp = mem.Read<int>(PlayerBase + Offsets.m_iHealth);
                bool LocalDormant = mem.Read<bool>(PlayerBase + Offsets.m_bDormant);

                if (LocalDormant || LocalHp == 0)
                    continue;


                VMatrix = mem.Read<Matrix4x4>(bClient + Offsets.m_dwViewMatrix);
                for (int i = 0; i <= 64; i++)
                {
                    int EntityBase = mem.Read<int>(bClient + Offsets.m_dwEntityList + (i - 1)*0x10);
                    int EntityTeam = mem.Read<int>(EntityBase + Offsets.m_iTeamNum);
                    int EntityHp = mem.Read<int>(EntityBase + Offsets.m_iHealth);
                    bool EntityDormant = mem.Read<bool>(EntityBase + Offsets.m_bDormant);

                    if (EntityDormant || EntityTeam == LocalTeam || EntityHp == 0)
                        continue;

                    Vector3 EntityPos = mem.Read<Vector3>(EntityBase + Offsets.m_vecOrigin);

                    ScreenVector sv = WorldToScreen(EntityPos.X, EntityPos.Y, EntityPos.Z);

                    if (!sv.Result)
                        continue;

                    int ex = (int)sv.X;
                    int ey = (int)sv.Y;

                    int sx = window.Width / 2;
                    int sy = window.Height - 10;

                    window.Graphics.DrawLine(sx, sy, ex, ey, 2, redBrush);
                    window.Graphics.DrawText(EntityHp.ToString(), espFont, greenBrush, ex, ey);
                }

                window.Graphics.EndScene();
            }
        }

        private static bool GetDll()
        {
            try
            {
                Process csgo = Process.GetProcessesByName("csgo")[0];

                foreach (ProcessModule module in csgo.Modules)
                {
                    if (module.ModuleName == "client.dll")
                    bClient = (int)module.BaseAddress;
                }

                window = new OverlayWindow(csgo.MainWindowHandle);

                redBrush = window.Graphics.CreateBrush(Color.Red);
                greenBrush = window.Graphics.CreateBrush(Color.Lime);
                espFont = window.Graphics.CreateFont("Tamoha", 12);

                mem = new Memory("csgo");

                return true;
            }
            catch
            {
                return false;
            }
        }
    }
}

 

Изменено пользователем Xipho
Большие куски кода у нас принято убирать под спойлер.
Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, elvis66666 сказал:

Возможно при переходе из borderless в fullscreen пересоздается девайс и поэтому крашится)

Игра не крашится. Просто не рисует вообще. А когда в окне. Линии рисуется даже поверх вк, рабочего стола и т.д.

Ссылка на комментарий
Поделиться на другие сайты

XenonH, Ты просто создаешь окно, которое даже не привязано к приложению. Посмотри уроки, с 0 - 1 часть. Поиск рисования в чужом окне DirectX. 

Скрытый текст

 

 

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, 2zolo2 сказал:

XenonH, Ты просто создаешь окно, которое даже не привязано к приложению. Посмотри уроки, с 0 - 1 часть. Поиск рисования в чужом окне DirectX. 

  Показать содержимое

 

 

Спасибо, но там C++. 

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, XenonH сказал:

У меня консольное приложение. То есть переставить?

Создание хацка через overlay - это наложение прозначного Window(окна) на окно игры и дальнейшая разрисовка этого прозрачного окна, используя примитивы.
Моя идея заключается в том, чтобы это прозрачное окно было всегда активным "поверх всех окон". 


Если не могёшь дотянуться до свойств созданного тобою же окна, юзай SetWindowPos (MSDN)
SetWindowPos(Handle, HWND_NOTOPMOST,
Left, Top, Width, Height, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE),

где HWND_TOPMOST - Places the window above all non-topmost windows. The window maintains its topmost position even when it is deactivated.

Не берусь утверждать, что это решит твою проблему, но попробовать стоит.

Ссылка на комментарий
Поделиться на другие сайты

1 минуту назад, mrPTyshnik сказал:

Создание хацка через overlay - это наложение прозначного Window(окна) на окно игры и дальнейшая разрисовка этого прозрачного окна, используя примитивы.
Моя идея заключается в том, чтобы это прозрачное окно было всегда активным "поверх всех окон". 


Если не могёшь дотянуться до свойств созданного тобою же окна, юзай SetWindowPos (MSDN)
SetWindowPos(Handle, HWND_NOTOPMOST,
Left, Top, Width, Height, SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE),

где HWND_TOPMOST - Places the window above all non-topmost windows. The window maintains its topmost position even when it is deactivated.

Не берусь утверждать, что это решит твою проблему, но попробовать стоит.

Я же говорю у меня консольное приложение.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.