Оптимизация бота грузчика на С++

ImmortalDev

Участник
Автор темы
90
50
Всем привет!
Написал бота грузчика, работает максимально просто и максимально убого, неоптимизированно.
В общем, работает он так:
Мы просто телепортируемся по траектории (тп на 1, 2 шага вперед), с задержкой в 1 секунду.
И так вот мы телепортируемся от и до груза.
И все манипуляции с телепортом у меня прописаны ВРУЧНУЮ.
То-есть для каждого "шага", я каждый раз вызываю функцию телепорта, что как по мне делает код некрасивым, тяжелым и убогим.
А теперь вопрос: Как мне можно это оптимизировать?
C++:
#include <windows.h>
#include <fcntl.h>
#include <stdio.h>
#include <io.h>
#include <fstream>
#include <conio.h>


DWORD WINAPI Sa_Thread(LPVOID);

DWORD APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    switch (fdwReason)
    {
        case DLL_PROCESS_ATTACH:
            CreateThread(NULL, NULL, Sa_Thread, NULL, NULL, NULL);
            break;

        case DLL_PROCESS_DETACH:
            // detach from process
            break;

        case DLL_THREAD_ATTACH:
            // attach to thread
            break;

        case DLL_THREAD_DETACH:
            // detach from thread
            break;
    }
    return TRUE; // succesful
}


void teleport_d(float x, float y, float z)
{
    float *position = (*(DWORD *)0xB6F5F0) ? (float *)(*(DWORD *)(*(DWORD *)0xB6F5F0 + 0x14) + 0x30) : NULL;
    position[0] = x;
    position[1] = y;
    position[2] = z;
}

int cheat()
{
    while(true)
    {
        Sleep(1000);
        teleport_d(2179.5950,-2256.0017,14.7734);
        Sleep(1000);
        teleport_d(2182.1963,-2258.5496,13.3756);
        Sleep(1000);
        teleport_d(2183.3308,-2259.6604,13.3948);
        Sleep(1000);
        teleport_d(2184.4214,-2260.7280,13.4132);
        Sleep(1000);
        teleport_d(2185.4373,-2261.7219,13.4304);
        Sleep(1000);
        teleport_d(2186.0332,-2262.3057,13.4405);
        Sleep(1000);
        teleport_d(2186.6299,-2262.8899,13.4434);
        Sleep(1000);
        teleport_d(2187.9397,-2264.1711,13.4731);
        Sleep(1000);
        teleport_d(2189.3259,-2265.5288,13.5045);
        Sleep(1000);
        teleport_d(2190.6785,-2266.9553,13.5353);
        Sleep(1000);
        teleport_d(2192.2461,-2268.6128,13.5469);
        Sleep(1000);
        teleport_d(2193.8040,-2270.2603,13.5547);
        Sleep(1000);
        teleport_d(2195.2205,-2271.7581,13.5547);
        Sleep(1000);
        teleport_d(2196.8728,-2273.5051,13.5547);
        Sleep(1000);
        teleport_d(2198.2751,-2274.9880,13.5547);
        Sleep(1000);
        teleport_d(2199.7937,-2276.5923,13.5547);
        Sleep(1000);
        teleport_d(2201.5554,-2278.4541,13.5547);
        Sleep(1000);
        teleport_d(2205.9878,-2283.0879,14.7647);
        Sleep(1000);
        teleport_d(2206.7129,-2284.5061,14.7647);
        Sleep(1000);
        teleport_d(2207.9849,-2286.9917,14.7647);
        Sleep(1000);
        teleport_d(2209.8196,-2288.0732,14.7647);
        Sleep(1000);
        teleport_d(2212.1792,-2288.4939,14.7647);
        Sleep(1000);
        teleport_d(2214.7864,-2289.6355,14.7647);
        Sleep(1000);
        teleport_d(2217.1809,-2289.8079,14.7647);
        Sleep(1000);
        teleport_d(2220.7568,-2288.9934,14.7647);
        Sleep(1000);
        teleport_d(2222.1819,-2287.7473,14.7647);
        Sleep(1000);
        teleport_d(2223.8997,-2286.2451,14.7647);
        Sleep(1000);
        teleport_d(2225.7881,-2283.6099,14.7647);
        Sleep(1000);
        teleport_d(2227.5083,-2282.1064,14.7647);
        Sleep(1000);
        teleport_d(2230.8342,-2283.7656,14.3916);
        Sleep(1000);
        teleport_d(2230.3079,-2286.0176,14.3751);//vzyat
        Sleep(1000);
        teleport_d(2230.8342,-2283.7656,14.3916);
        Sleep(1000);
        teleport_d(2227.5083,-2282.1064,14.7647);
        Sleep(1000);
        teleport_d(2225.7881,-2283.6099,14.7647);
        Sleep(1000);
        teleport_d(2223.8997,-2286.2451,14.7647);
        Sleep(1000);
        teleport_d(2222.1819,-2287.7473,14.7647);
        Sleep(1000);
        teleport_d(2220.7568,-2288.9934,14.7647);
        Sleep(1000);
        teleport_d(2217.1809,-2289.8079,14.7647);
        Sleep(1000);
        teleport_d(2214.7864,-2289.6355,14.7647);
        Sleep(1000);
        teleport_d(2212.1792,-2288.4939,14.7647);
        Sleep(1000);
        teleport_d(2209.8196,-2288.0732,14.7647);
        Sleep(1000);
        teleport_d(2207.9849,-2286.9917,14.7647);
        Sleep(1000);
        teleport_d(2206.7129,-2284.5061,14.7647);
        Sleep(1000);
        teleport_d(2205.9878,-2283.0879,14.7647);
        Sleep(1000);
        teleport_d(2201.5554,-2278.4541,13.5547);
        Sleep(1000);
        teleport_d(2199.7937,-2276.5923,13.5547);
        Sleep(1000);
        teleport_d(2198.2751,-2274.9880,13.5547);
        Sleep(1000);
        teleport_d(2196.8728,-2273.5051,13.5547);
        Sleep(1000);
        teleport_d(2193.8040,-2270.2603,13.5547);
        Sleep(1000);
        teleport_d(2192.2461,-2268.6128,13.5469);
        Sleep(1000);
        teleport_d(2190.6785,-2266.9553,13.5353);
        Sleep(1000);
        teleport_d(2189.3259,-2265.5288,13.5045);
        Sleep(1000);
        teleport_d(2187.9397,-2264.1711,13.4731);
        Sleep(1000);
        teleport_d(2185.4373,-2261.7219,13.4304);
        Sleep(1000);
        teleport_d(2184.4214,-2260.7280,13.4132);
        Sleep(1000);
        teleport_d(2183.3308,-2259.6604,13.3948);
        Sleep(1000);
        teleport_d(2179.5950,-2256.0017,14.7734);
        Sleep(1000);
        teleport_d(2173.9089,-2249.9873,13.3032);
        Sleep(1000);

    }
}

DWORD WINAPI Sa_Thread(LPVOID)
{
    cheat();
}
 
Решение
Функция разбивает расстояние между 2 векторами на кучу векторов с некоторым шагом.
Использование: split(float x0, float y0, float z0, float x1, float y1, float z1, float step)
x0, y0, z0 - начальные координаты (первый вектор)
x1, y1, z1 - конечные координаты (второй вектор)
step - шаг, с которым будет поделено расстояние между векторами.
Возвращает вектор с разбитым расстоянием.
C++:
std::vector <CVector> split(float x0, float y0, float z0, float x1, float y1, float z1, float step)
{
    CVector direction = { x1 - x0, y1 - y0, z1 - z0 };
    float distance = direction.Normalize();
    std::vector <CVector> path;
    CVector begin = { x0, y0, z0 };
    CVector cursor = { x0, y0, z0 };
    path.push_back(cursor)...

iAmerican

Известный
Друг
615
257
Функция разбивает расстояние между 2 векторами на кучу векторов с некоторым шагом.
Использование: split(float x0, float y0, float z0, float x1, float y1, float z1, float step)
x0, y0, z0 - начальные координаты (первый вектор)
x1, y1, z1 - конечные координаты (второй вектор)
step - шаг, с которым будет поделено расстояние между векторами.
Возвращает вектор с разбитым расстоянием.
C++:
std::vector <CVector> split(float x0, float y0, float z0, float x1, float y1, float z1, float step)
{
    CVector direction = { x1 - x0, y1 - y0, z1 - z0 };
    float distance = direction.Normalize();
    std::vector <CVector> path;
    CVector begin = { x0, y0, z0 };
    CVector cursor = { x0, y0, z0 };
    path.push_back(cursor);
    while ((cursor - begin).Length() < distance)
    {
        cursor = cursor + direction * step;
        path.push_back(cursor);
    }
    return path;
}

C++:
CVector cvSplit = split(123.000, 123.000, 123.000, 125.000, 125.000,125.000, 2);

void teleport_d(CVector tpPos)
{
    float *position = (*(DWORD *)0xB6F5F0) ? (float *)(*(DWORD *)(*(DWORD *)0xB6F5F0 + 0x14) + 0x30) : NULL;
    position[0] = tpPos.x;
    position[1] = tpPos.y;
    position[2] = tpPos.z;
}


for(int i = 0; i < cvSplit.size(); i++) {
teleport_d(cvSplit[i]);
Sleep(1000);
}
Но это даже ботом назвать нельзя.
 
Последнее редактирование:
  • Нравится
Реакции: Vintik и ImmortalDev