Исходник Код простого WalkBot'а

@User344
Guest
@
Вообще это нельзя назвать валк ботом, так как он баннихопит .-.
Мне кажется будет нужен тем, у кого хвх хаки, так как если немного поднастроить - будет сильно помогать в набирании скорости и прекратит столкновения (ну или будет мешать если ты криворукий даун).

Как это выглядит: (записывал почти с первого дубля, так шо бот не лупит)

Внимание: Код шкрябал ночью и за пару часов, во искупления вины,
так что скорее всего там серьезные баги и работает не самым лучшим образом.


Теперь начнем пастить:
Давайте укажим наши настройки:
Код:
#define MIN_VELOCITY 200 // Минимальная скорость что бы сработал баннихоп/автострейф
#define ADDITION_POS 30 // Сколько отсупать по бокам, что бы проверять на столкновения
#define ANGLE_CLAMP_VALUE 2 // Какой максимум разворота угла за тик?
#define TRACE_DISTANCE 150 // Длина линии
#define CHECK_MAX_ANGLE 360 // На сколько градусов будет бот искать
#define CHECK_ANGLE 2 // Слишком поздно(4:40) что бы думать, просто чекните код и посмотрите что за что отвечает
Перед тем как спастить основную функцию давайте сделаем врапер для линий.
Код:
trace_t TraceLine(Vector3& vecStart, QAngle& angAngle, float distance, IClientEntity* pSkipEntity)
    {
        Vector3 vecEnd;
        U::AngleVectors(angAngle, &vecEnd, NULL, NULL);
        vecEnd = vecStart + (vecEnd * distance);

        trace_t tr;
        Ray_t ray;
        CTraceFilter filter;
        filter.pSkip = pSkipEntity;
        ray.Init(vecStart, vecEnd);
        Interface.EngineTrace->TraceRay(ray, MASK_SOLID, &filter, &tr);
        // Использую MASK_SOLID потому что она проверяет на все, что может блокировать движение
        // MASK_SHOT же проверяет только на объекты где может рисоватся пуля (НЕ проверяет ворота или скайбокс, например)

        return tr;
    }
А вот и главная функция:
Код:
void Run(CPlayer* pLocalPlayer, CUserCmd* cmd)
    {
        // Не люблю вызывать много раз одну функцию с одним и тем же результатом
        // Лучше сохранить несколько таких в начале
        Vector3 vecLocalPos = pLocalPlayer->GetEyePosition();
        float flVelocity = pLocalPlayer->GetFloatVelocity();

        // Цикл ниже используется для того, что бы лучи шли не только с нашей головы,
        // Но и сбоку (Для того, что бы не блокировать наше передвежение если мы задеваем что то
        for (int a = -ADDITION_POS; a <= ADDITION_POS; a += ADDITION_POS)
        {
            Vector3 vecPos;
            U::AngleVectors(cmd->viewangles, NULL, &vecPos, NULL);
            vecPos = vecLocalPos + (vecPos * a);


            // Проводим линию, что бы узнать - нужно поворачивать, или нет
            // P.S: Провожу от головы, что бы не поворачивало на ступеньках (нам же это не надо?)
            trace_t tr = TraceLine(vecPos, cmd->viewangles, TRACE_DISTANCE, pLocalPlayer);

            // Мы застряли?
            if (tr.startsolid)
                continue;

            // Линия не прошла весь путь, а значит мы куда то врезаемся
            // Значит поворачиваем
            if (tr.fraction < 1.f)
            {
                // Проводим CHECK_ANGLE линий на CHECK_MAX_ANGLE градусов, что бы узнать куда лучше поворачивать
                for (float i = 0; i < CHECK_MAX_ANGLE; i += CHECK_ANGLE)
                {
                    static bool bSwap = false; bSwap = !bSwap;
                    float angTemp = bSwap ? i : -i;
                    trace_t tr1 = TraceLine(vecPos, cmd->viewangles + QAngle(0, angTemp, 0), TRACE_DISTANCE, pLocalPlayer);
                    if (tr1.startsolid || tr1.fraction < 1.f)
                        continue;

                    // Что бы не терять скорость при очень резких разворотах
                    if (i > ANGLE_CLAMP_VALUE)
                        angTemp = angTemp < 0 ? -ANGLE_CLAMP_VALUE : ANGLE_CLAMP_VALUE;

                    // Делаем стрейф и смотрим в сторону поворота
                    cmd->sidemove = bSwap ? 450 : -450;
                    cmd->viewangles.y += angTemp;
                    Interface.Engine->SetViewAngles(cmd->viewangles);
                    break;
                }
            }
        }

        // Если скорость меньше MIN_VELOCITY, тогда не баннихопим/стрейфим, а разбегаемся
        if (flVelocity < MIN_VELOCITY)
        {
            cmd->buttons |= IN_FORWARD;
            cmd->forwardmove = 250;

            return;
        }
        else
        {
            // Прыгаем
            cmd->buttons |= IN_JUMP;

            // Авто-стрейфер
            static bool bSwapStrafe = false; bSwapStrafe = !bSwapStrafe;
            if (bSwapStrafe) {
                cmd->viewangles.y += 1;
                cmd->sidemove = 450;
            }
            else {
                cmd->viewangles.y -= 1;
                cmd->sidemove = -450;
            }
        }
    }

Хайд не ставлю, в любом случае если человек даун - не сможет спастить.
Указывайте автора кода(меня) при перезаливе на другой форум.
 
Забаненный
Статус
Оффлайн
Регистрация
24 Апр 2016
Сообщения
1,077
Реакции[?]
272
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Щас бы не уметь пастить Lmao
 
ɪɴ ᴀ ʏᴇᴀʀ ᴜ'ʟʟ ʀᴇɢʀᴇᴛ ᴛʜᴀᴛ ʏᴏᴜ ᴅɪᴅn'ᴛ sᴛᴀʀᴛ ᴛᴏᴅᴀʏ
Пользователь
Статус
Оффлайн
Регистрация
15 Мар 2017
Сообщения
528
Реакции[?]
126
Поинты[?]
0
Участник
Статус
Оффлайн
Регистрация
25 Апр 2017
Сообщения
502
Реакции[?]
156
Поинты[?]
0
У меня почему то он от стен не отталкивается и врезается боком,хотя у тебя в ролике отталкивается
 
Последнее редактирование:
GDPR_Anonymous
Пользователь
Статус
Оффлайн
Регистрация
17 Фев 2017
Сообщения
362
Реакции[?]
133
Поинты[?]
0
The end
Пользователь
Статус
Оффлайн
Регистрация
28 Янв 2017
Сообщения
448
Реакции[?]
127
Поинты[?]
0
Сверху Снизу