Гайд Fixed lw v3 for last upd

Статус
В этой теме нельзя размещать новые ответы.
(\ /) _ ($ __ $ ) _ (\ /)
Пользователь
Статус
Оффлайн
Регистрация
22 Окт 2021
Сообщения
368
Реакции[?]
92
Поинты[?]
24K
Здравствуйте, хочу вам представить фикс дт, аа, да и крашей. ( hooked_createmove.cpp )
Первое.
hooked_createmove.cpp
C++:
// This is an independent project of an individual developer. Dear PVS-Studio, please check it.
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: http://www.viva64.com

#include "..\hooks.hpp"
#include "..\..\features\ragebot\antiaim.h"
#include "..\..\features\visuals\other_esp.h"
#include "..\..\features\misc\fakelag.h"
#include "..\..\features\misc\prediction_system.h"
#include "..\..\features\ragebot\aim.h"
#include "..\..\features\legitbot\legitbot.h"
#include "..\..\features\misc\bunnyhop.h"
#include "..\..\features\misc\airstrafe.h"
#include "..\..\features\misc\spammers.h"
#include "..\..\features\fakewalk\slowwalk.h"
#include "..\..\features\misc\misc.h"
#include "..\..\features\misc\logs.h"
#include "..\..\features\visuals\GrenadePrediction.h"
#include "..\..\features\ragebot\knifebot.h"
#include "..\..\features\ragebot\zeusbot.h"
#include "..\..\features\lagcompensation\local_animations.h"
#include "..\..\features\lagcompensation\animation_system.h"

using CreateMove_t = void(__thiscall*)(IBaseClientDLL*, int, float, bool);

// спастил с зерона так как удобно, сами делаете как вам нужно.
bool SetupPacket(int sequence_number, bool* pbSendPacket)
{
    CUserCmd* m_pcmd = m_input()->GetUserCmd(sequence_number);

    if (!m_pcmd || !m_pcmd->m_command_number)
        return false;

    if (!g_ctx.local()->is_alive())
        return false;

    g_ctx.send_packet = pbSendPacket;
    return true;// ;)))))
}

void __stdcall hooked_createmove(int sequence_number, float input_sample_frametime, bool active, bool& bSendPacket)
{
    static auto original_fn = hooks::client_hook->get_func_address <CreateMove_t>(22);
    original_fn(m_client(), sequence_number, input_sample_frametime, active);
    g_ctx.local((player_t*)m_entitylist()->GetClientEntity(m_engine()->GetLocalPlayer()), true);

    CUserCmd* m_pcmd = m_input()->GetUserCmd(sequence_number);
    CVerifiedUserCmd* verified = m_input()->GetVerifiedUserCmd(sequence_number);

    g_ctx.globals.in_createmove = false;

    if (!verified || !SetupPacket(sequence_number, &bSendPacket))
        return original_fn(m_client(), sequence_number, input_sample_frametime, active);

    //if (!m_pcmd->m_command_number)
        //return; //original_fn(m_client(), sequence_number, input_sample_frametime, active);

    //if (!verified)
        //return; //original_fn(m_client(), sequence_number, input_sample_frametime, active);

    //bool original_result = original_fn(m_client(), sequence_number, input_sample_frametime, active);

    if (original_fn)
    {
        m_prediction()->SetLocalViewAngles(m_pcmd->m_viewangles);
        m_engine()->SetViewAngles(m_pcmd->m_viewangles);
    }

    if (!g_ctx.available())
        return; //original_fn(m_client(), sequence_number, input_sample_frametime, active);

    misc::get().rank_reveal();
    spammers::get().clan_tag();

    if (!g_ctx.local()->is_alive()) //-V807
        return; //original_fn(m_clientmode(), smt, m_pcmd);

    uintptr_t* frame_ptr;
    __asm mov frame_ptr, ebp;

    g_ctx.globals.weapon = g_ctx.local()->m_hActiveWeapon().Get();

    if (!g_ctx.globals.weapon)
        return; //original_fn(m_clientmode(), smt, m_pcmd);

    g_ctx.globals.in_createmove = true;
    g_ctx.set_command(m_pcmd);

    if (hooks::menu_open && g_ctx.globals.focused_on_input)
    {
        m_pcmd->m_buttons = 0;
        m_pcmd->m_forwardmove = 0.0f;
        m_pcmd->m_sidemove = 0.0f;
        m_pcmd->m_upmove = 0.0f;
    }

    static auto should_recharge = false;

    if (should_recharge)
    {
        ++g_ctx.globals.ticks_allowed;

        m_pcmd->m_tickcount = INT_MAX;
        m_pcmd->m_buttons &= ~IN_ATTACK;

        if (g_ctx.globals.ticks_allowed >= 16)
        {
            should_recharge = false;
            *(bool*)(*frame_ptr - 0x1C) = true;
        }
        else
            *(bool*)(*frame_ptr - 0x1C) = false;

        return;
    }

    if (g_ctx.globals.ticks_allowed < 16 && (misc::get().double_tap_enabled && misc::get().double_tap_key || misc::get().hide_shots_enabled && misc::get().hide_shots_key))
        should_recharge = true;

    g_ctx.globals.backup_tickbase = g_ctx.local()->m_nTickBase();
    g_ctx.globals.fixed_tickbase = g_ctx.local()->m_nTickBase() - g_ctx.globals.next_tickbase_shift;

    if (hooks::menu_open)
    {
        m_pcmd->m_buttons &= ~IN_ATTACK;
        m_pcmd->m_buttons &= ~IN_ATTACK2;
    }

    if (m_pcmd->m_buttons & IN_ATTACK2 && g_cfg.ragebot.enable && g_ctx.globals.weapon->m_iItemDefinitionIndex() == WEAPON_REVOLVER)
        m_pcmd->m_buttons &= ~IN_ATTACK2;

    if (g_cfg.ragebot.enable && !g_ctx.globals.weapon->can_fire(true))
    {
        if (m_pcmd->m_buttons & IN_ATTACK && !g_ctx.globals.weapon->is_non_aim() && g_ctx.globals.weapon->m_iItemDefinitionIndex() != WEAPON_REVOLVER)
            m_pcmd->m_buttons &= ~IN_ATTACK;
        else if ((m_pcmd->m_buttons & IN_ATTACK || m_pcmd->m_buttons & IN_ATTACK2) && (g_ctx.globals.weapon->is_knife() || g_ctx.globals.weapon->m_iItemDefinitionIndex() == WEAPON_REVOLVER) && g_ctx.globals.weapon->m_iItemDefinitionIndex() != WEAPON_HEALTHSHOT)
        {
            if (m_pcmd->m_buttons & IN_ATTACK)
                m_pcmd->m_buttons &= ~IN_ATTACK;

            if (m_pcmd->m_buttons & IN_ATTACK2)
                m_pcmd->m_buttons &= ~IN_ATTACK2;
        }
    }

    if (m_pcmd->m_buttons & IN_FORWARD && m_pcmd->m_buttons & IN_BACK)
    {
        m_pcmd->m_buttons &= ~IN_FORWARD;
        m_pcmd->m_buttons &= ~IN_BACK;
    }

    if (m_pcmd->m_buttons & IN_MOVELEFT && m_pcmd->m_buttons & IN_MOVERIGHT)
    {
        m_pcmd->m_buttons &= ~IN_MOVELEFT;
        m_pcmd->m_buttons &= ~IN_MOVERIGHT;
    }

    bSendPacket = true;
    //*g_ctx.send_packet = true;
    g_ctx.globals.tickbase_shift = 0;
    g_ctx.globals.double_tap_fire = false;
    g_ctx.globals.force_send_packet = false;
    g_ctx.globals.exploits = misc::get().double_tap_key || misc::get().hide_shots_key;
    g_ctx.globals.current_weapon = g_ctx.globals.weapon->get_weapon_group(g_cfg.ragebot.enable);
    g_ctx.globals.slowwalking = false;
    g_ctx.globals.original_forwardmove = m_pcmd->m_forwardmove;
    g_ctx.globals.original_sidemove = m_pcmd->m_sidemove;

    antiaim::get().breaking_lby = false;

    auto wish_angle = m_pcmd->m_viewangles;

    misc::get().fast_stop(m_pcmd);

    if (g_cfg.misc.bunnyhop)
        bunnyhop::get().create_move();

    misc::get().SlideWalk(m_pcmd);

    misc::get().NoDuck(m_pcmd);

    misc::get().AutoCrouch(m_pcmd);

    GrenadePrediction::get().Tick(m_pcmd->m_buttons);

    if (g_cfg.misc.crouch_in_air && !(g_ctx.local()->m_fFlags() & FL_ONGROUND))
        m_pcmd->m_buttons |= IN_DUCK;

    engineprediction::get().prediction_data.reset(); //-V807
    engineprediction::get().setup();

    engineprediction::get().predict(m_pcmd);
    local_animations::get().update_prediction_animations();

    g_ctx.globals.eye_pos = g_ctx.local()->get_shoot_position();

    if (g_cfg.misc.airstrafe)
        airstrafe::get().create_move(m_pcmd);

    if (key_binds::get().get_key_bind_state(19) && engineprediction::get().backup_data.flags & FL_ONGROUND && !(g_ctx.local()->m_fFlags() & FL_ONGROUND)) //-V807
        m_pcmd->m_buttons |= IN_JUMP;

    if (key_binds::get().get_key_bind_state(21))
        slowwalk::get().create_move(m_pcmd);

    if (g_cfg.ragebot.enable && !g_ctx.globals.weapon->is_non_aim() && engineprediction::get().backup_data.flags & FL_ONGROUND && g_ctx.local()->m_fFlags() & FL_ONGROUND)
        slowwalk::get().create_move(m_pcmd, 0.95f + 0.003125f * (16 - m_clientstate()->iChokedCommands));

    if (!should_recharge)
        fakelag::get().Createmove();

    g_ctx.globals.aimbot_working = false;
    g_ctx.globals.revolver_working = false;

    auto backup_velocity = g_ctx.local()->m_vecVelocity();
    auto backup_abs_velocity = g_ctx.local()->m_vecAbsVelocity();

    g_ctx.local()->m_vecVelocity() = engineprediction::get().backup_data.velocity;
    g_ctx.local()->m_vecAbsVelocity() = engineprediction::get().backup_data.velocity;

    g_ctx.globals.weapon->update_accuracy_penality();

    g_ctx.local()->m_vecVelocity() = backup_velocity;
    g_ctx.local()->m_vecAbsVelocity() = backup_abs_velocity;

    g_ctx.globals.inaccuracy = g_ctx.globals.weapon->get_inaccuracy();
    g_ctx.globals.spread = g_ctx.globals.weapon->get_spread();

    aim::get().run(m_pcmd);
    legit_bot::get().createmove(m_pcmd);

    zeusbot::get().run(m_pcmd);
    knifebot::get().run(m_pcmd);

    misc::get().automatic_peek(m_pcmd, wish_angle.y);

    antiaim::get().desync_angle = 0.0f;
    antiaim::get().create_move(m_pcmd);

    if (m_gamerules()->m_bIsValveDS() && m_clientstate()->iChokedCommands >= 6) //-V648
    {
        bSendPacket = true;
        fakelag::get().started_peeking = false;
    }
    else if (!m_gamerules()->m_bIsValveDS() && m_clientstate()->iChokedCommands >= 16) //-V648
    {
        bSendPacket = true;
        fakelag::get().started_peeking = false;
    }

    if (g_ctx.globals.should_send_packet)
    {
        g_ctx.globals.force_send_packet = true;
        bSendPacket = true;
        fakelag::get().started_peeking = false;
    }

    if (g_ctx.globals.should_choke_packet)
    {
        g_ctx.globals.should_choke_packet = false;
        g_ctx.globals.should_send_packet = true;
        *g_ctx.send_packet = false;
    }

    if (!g_ctx.globals.weapon->is_non_aim())
    {
        auto double_tap_aim_check = false;

        if (m_pcmd->m_buttons & IN_ATTACK && g_ctx.globals.double_tap_aim_check)
        {
            double_tap_aim_check = true;
            g_ctx.globals.double_tap_aim_check = false;
        }

        auto revolver_shoot = g_ctx.globals.weapon->m_iItemDefinitionIndex() == WEAPON_REVOLVER && !g_ctx.globals.revolver_working && (m_pcmd->m_buttons & IN_ATTACK || m_pcmd->m_buttons & IN_ATTACK2);

        if (m_pcmd->m_buttons & IN_ATTACK && g_ctx.globals.weapon->m_iItemDefinitionIndex() != WEAPON_REVOLVER || revolver_shoot)
        {
            static auto weapon_recoil_scale = m_cvar()->FindVar(crypt_str("weapon_recoil_scale"));

            if (g_cfg.ragebot.enable)
                m_pcmd->m_viewangles -= g_ctx.local()->m_aimPunchAngle() * weapon_recoil_scale->GetFloat();

            if (!g_ctx.globals.fakeducking)
            {
                g_ctx.globals.force_send_packet = true;
                g_ctx.globals.should_choke_packet = true;
                bSendPacket = true;
                fakelag::get().started_peeking = false;
            }

            aim::get().last_shoot_position = g_ctx.globals.eye_pos;

            if (!double_tap_aim_check)
                g_ctx.globals.double_tap_aim = false;
        }
    }
    else if (!g_ctx.globals.fakeducking && g_ctx.globals.weapon->is_knife() && (m_pcmd->m_buttons & IN_ATTACK || m_pcmd->m_buttons & IN_ATTACK2))
    {
        g_ctx.globals.force_send_packet = true;
        g_ctx.globals.should_choke_packet = true;
        bSendPacket = true;
        fakelag::get().started_peeking = false;
    }

    if (g_ctx.globals.fakeducking)
        g_ctx.globals.force_send_packet = *g_ctx.send_packet;

    for (auto& backup : aim::get().backup)
        backup.adjust_player();

    auto backup_ticks_allowed = g_ctx.globals.ticks_allowed;

    if (misc::get().double_tap(m_pcmd))
        misc::get().hide_shots(m_pcmd, false);
    else
    {
        g_ctx.globals.ticks_allowed = backup_ticks_allowed;
        misc::get().hide_shots(m_pcmd, true);
    }

    if (!g_ctx.globals.weapon->is_non_aim())
    {
        auto double_tap_aim_check = false;

        if (m_pcmd->m_buttons & IN_ATTACK && g_ctx.globals.double_tap_aim_check)
        {
            double_tap_aim_check = true;
            g_ctx.globals.double_tap_aim_check = false;
        }

        auto revolver_shoot = g_ctx.globals.weapon->m_iItemDefinitionIndex() == WEAPON_REVOLVER && !g_ctx.globals.revolver_working && (m_pcmd->m_buttons & IN_ATTACK || m_pcmd->m_buttons & IN_ATTACK2);

        if (!double_tap_aim_check && m_pcmd->m_buttons & IN_ATTACK && g_ctx.globals.weapon->m_iItemDefinitionIndex() != WEAPON_REVOLVER || revolver_shoot)
            g_ctx.globals.double_tap_aim = false;
    }

    if (m_globals()->m_tickcount - g_ctx.globals.last_aimbot_shot > 16) //-V807
    {
        g_ctx.globals.double_tap_aim = false;
        g_ctx.globals.double_tap_aim_check = false;
    }

    engineprediction::get().finish();

    if (g_ctx.globals.loaded_script)
        for (auto current : c_lua::get().hooks.getHooks(crypt_str("on_createmove")))
            current.func();

    if (g_cfg.misc.anti_untrusted)
        math::normalize_angles(m_pcmd->m_viewangles);
    else
    {
        m_pcmd->m_viewangles.y = math::normalize_yaw(m_pcmd->m_viewangles.y);
        m_pcmd->m_viewangles.z = 0.0f;
    }

    util::movement_fix(wish_angle, m_pcmd);

    if (should_recharge)
        bSendPacket = true;

    static auto previous_ticks_allowed = g_ctx.globals.ticks_allowed;

    if (g_ctx.globals.ticks_allowed > 17)
        g_ctx.globals.ticks_allowed = math::clamp(g_ctx.globals.ticks_allowed - 1, 0, 17);

    if (previous_ticks_allowed && !g_ctx.globals.ticks_allowed)
        g_ctx.globals.ticks_choke = 16;

    previous_ticks_allowed = g_ctx.globals.ticks_allowed;

    if (g_ctx.globals.ticks_choke)
    {
        bSendPacket = g_ctx.globals.force_send_packet;
        --g_ctx.globals.ticks_choke;
    }

    auto& correct = g_ctx.globals.data.emplace_front();

    correct.command_number = m_pcmd->m_command_number;
    correct.choked_commands = m_clientstate()->iChokedCommands + 1;
    correct.tickcount = m_globals()->m_tickcount;

    if (*g_ctx.send_packet)
        g_ctx.globals.choked_number.clear();
    else
        g_ctx.globals.choked_number.emplace_back(correct.command_number);

    while (g_ctx.globals.data.size() > (int)(2.0f / m_globals()->m_intervalpertick))
        g_ctx.globals.data.pop_back();

    auto& out = g_ctx.globals.commands.emplace_back();

    out.is_outgoing = *g_ctx.send_packet;
    out.is_used = false;
    out.command_number = m_pcmd->m_command_number;
    out.previous_command_number = 0;

    while (g_ctx.globals.commands.size() > (int)(1.0f / m_globals()->m_intervalpertick))
        g_ctx.globals.commands.pop_front();

    if (!*g_ctx.send_packet && !m_gamerules()->m_bIsValveDS())
    {
        auto net_channel = m_clientstate()->pNetChannel;

        if (net_channel->m_nChokedPackets > 0 && !(net_channel->m_nChokedPackets % 4))
        {
            auto backup_choke = net_channel->m_nChokedPackets;
            net_channel->m_nChokedPackets = 0;

            net_channel->send_datagram();
            --net_channel->m_nOutSequenceNr;

            net_channel->m_nChokedPackets = backup_choke;
        }
    }

    if (*g_ctx.send_packet && !g_ctx.globals.should_send_packet && (!g_ctx.globals.should_choke_packet || (!misc::get().hide_shots_enabled && !g_ctx.globals.double_tap_fire)))
    {
        local_animations::get().local_data.fake_angles = m_pcmd->m_viewangles; //-V807
        local_animations::get().local_data.real_angles = local_animations::get().local_data.stored_real_angles;
    }

    if (!antiaim::get().breaking_lby)
        local_animations::get().local_data.stored_real_angles = m_pcmd->m_viewangles;

    if (*g_ctx.send_packet && g_ctx.globals.should_send_packet)
        g_ctx.globals.should_send_packet = false;

    if (g_cfg.misc.buybot_enable && g_ctx.globals.should_buy)
    {
        --g_ctx.globals.should_buy;

        if (!g_ctx.globals.should_buy)
        {
            std::string buy;

            switch (g_cfg.misc.buybot1)
            {
            case 1:
                buy += crypt_str("buy g3sg1; ");
                break;
            case 2:
                buy += crypt_str("buy awp; ");
                break;
            case 3:
                buy += crypt_str("buy ssg08; ");
                break;
            }

            switch (g_cfg.misc.buybot2)
            {
            case 1:
                buy += crypt_str("buy elite; ");
                break;
            case 2:
                buy += crypt_str("buy deagle; buy revolver; ");
                break;
            }

            if (g_cfg.misc.buybot3[BUY_ARMOR])
                buy += crypt_str("buy vesthelm; buy vest; ");

            if (g_cfg.misc.buybot3[BUY_TASER])
                buy += crypt_str("buy taser; ");

            if (g_cfg.misc.buybot3[BUY_GRENADES])
                buy += crypt_str("buy molotov; buy hegrenade; buy smokegrenade; buy flashbang; buy flashbang; buy decoy; ");

            if (g_cfg.misc.buybot3[BUY_DEFUSER])
                buy += crypt_str("buy defuser; ");

            m_engine()->ExecuteClientCmd(buy.c_str());
        }
    }

    g_ctx.globals.in_createmove = false;

    //*(bool*)(*frame_ptr - 0x1C) = *g_ctx.send_packet;
    //return false;

    verified->m_cmd = *m_pcmd;
    verified->m_crc = m_pcmd->GetChecksum();
}

//pasted не помню откуда.
__declspec(naked) void __stdcall hooks::hooked_createmove_naked(int sequence_number, float input_sample_frametime, bool active)
{
    __asm
    {
        push ebx
        push esp
        push dword ptr[esp + 20]
        push dword ptr[esp + 0Ch + 8]
        push dword ptr[esp + 10h + 4]
        call hooked_createmove
        pop ebx
        retn 0Ch
    }
}
Если у вас ошибка связанная с local_animations::get().update_prediction_animations(); создайте для него определение, найдите его в createmove и нажмите ctrl и левой кнопкой мыши по нему, вы перешли туда где его уже другой человек обьявлял ( умнее вас потому, что у он знает как пофиксить ), наведитесь на обьявление 1645705951574.png

и создайте определение, вот для него код ( деф лв )

Код:
    auto alloc = !local_data.prediction_animstate;
    auto change = !alloc && handle != &g_ctx.local()->GetRefEHandle(); //-V807
    auto reset = !alloc && !change && g_ctx.local()->m_flSpawnTime() != spawntime; //-V550

    if (change)
        m_memalloc()->Free(local_data.prediction_animstate);

    if (reset)
    {
        util::reset_state(local_data.prediction_animstate);
        spawntime = g_ctx.local()->m_flSpawnTime();
    }

    if (alloc || change)
    {
        local_data.prediction_animstate = (c_baseplayeranimationstate*)m_memalloc()->Alloc(sizeof(c_baseplayeranimationstate));

        if (local_data.prediction_animstate)
            util::create_state(local_data.prediction_animstate, g_ctx.local());

        handle = (CBaseHandle*)&g_ctx.local()->GetRefEHandle();
        spawntime = g_ctx.local()->m_flSpawnTime();
    }

    if (!alloc && !change && !reset)
    {
        float pose_parameter[24]; //-V688
        memcpy(pose_parameter, &g_ctx.local()->m_flPoseParameter(), 24 * sizeof(float));

        AnimationLayer layers[15]; //-V688
        memcpy(layers, g_ctx.local()->get_animlayers(), g_ctx.local()->animlayer_count() * sizeof(AnimationLayer));

        local_data.prediction_animstate->m_pBaseEntity = g_ctx.local();
        util::update_state(local_data.prediction_animstate, ZERO);

        g_ctx.local()->setup_bones_fixed(g_ctx.globals.prediction_matrix, BONE_USED_BY_HITBOX);

        memcpy(&g_ctx.local()->m_flPoseParameter(), pose_parameter, 24 * sizeof(float));
        memcpy(g_ctx.local()->get_animlayers(), layers, g_ctx.local()->animlayer_count() * sizeof(AnimationLayer));
    }
Теперь переходим в майн.cpp ( main.cpp ) и ищем глазки и вспомогательными средствами visualstudio ( ctrl f )
hooks::clientmode_hook->hook_function(reinterpret_cast<uintptr_t>(hooks::hooked_createmove), 24);
Коментим его "//"
Ищем сверху client_hook1645706142305.png

Ниже него вставляем hooks::client_hook->hook_function(reinterpret_cast<uintptr_t>(hooks::hooked_createmove_naked), 22); //-V107 //-V221
Следующий шаг и почти финальный, заменяем все g_ctx.send_packet на g_ctx.send_packet*
И наконец-то финальный, заходим в ctx.hpp и ищем bool send_packet = false;
Меняем его на bool* send_packet = false;
Ура, я пофиксил ваш чит, а точнее не я, а Credits: Abybachup
Линиус, ты был прав, у меня просто дт на клмуве был. Прости.
( сделал для самых маленьких и тупых )
 
Последнее редактирование:
Начинающий
Статус
Оффлайн
Регистрация
6 Янв 2022
Сообщения
38
Реакции[?]
5
Поинты[?]
0
Уже 3 репоста с юца так и кредиты неправильные, остановитесь
 
(\ /) _ ($ __ $ ) _ (\ /)
Пользователь
Статус
Оффлайн
Регистрация
22 Окт 2021
Сообщения
368
Реакции[?]
92
Поинты[?]
24K
Уже 3 репоста с юца так и кредиты неправильные, остановитесь
В смысле кредиты неправильные, я с гитхаба брал, у чела, и мне еще помогал Shash, еще что-то пукнешь?))
 
Начинающий
Статус
Оффлайн
Регистрация
6 Янв 2022
Сообщения
38
Реакции[?]
5
Поинты[?]
0
Пользователь
Статус
Оффлайн
Регистрация
25 Мар 2021
Сообщения
187
Реакции[?]
74
Поинты[?]
32K
main cpp search - hooks::clientmode_hook->hook_function(reinterpret_cast<uintptr_t>(hooks::hooked_createmove), 24);
change 24 to 22 hooks::clientmode_hook->hook_function(reinterpret_cast<uintptr_t>(hooks::hooked_createmove), 22);


hooked_createmove.cpp

C++:
// This is an independent project of an individual developer. Dear PVS-Studio, please check it.
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: http://www.viva64.com

// This is an independent project of an individual developer. Dear PVS-Studio, please check it.
// PVS-Studio Static Code Analyzer for C, C++, C#, and Java: http://www.viva64.com

#include "..\hooks.hpp"
#include "..\..\features\ragebot\antiaim.h"
#include "..\..\features\visuals\other_esp.h"
#include "..\..\features\misc\fakelag.h"
#include "..\..\features\misc\prediction_system.h"
#include "..\..\features\ragebot\aim.h"
#include "..\..\features\legitbot\legitbot.h"
#include "..\..\features\misc\bunnyhop.h"
#include "..\..\features\misc\airstrafe.h"
#include "..\..\features\misc\spammers.h"
#include "..\..\features\fakewalk\slowwalk.h"
#include "..\..\features\misc\misc.h"
#include "..\..\features\misc\logs.h"
#include "..\..\features\visuals\GrenadePrediction.h"
#include "..\..\features\ragebot\knifebot.h"
#include "..\..\features\ragebot\zeusbot.h"
#include "..\..\features\lagcompensation\local_animations.h"
#include "..\..\features\lagcompensation\animation_system.h"

#include "../../features/exploit/exploit.h"

using CreateMove_t = void(__thiscall*)(IBaseClientDLL*, int, float, bool);

bool SetupPacket(int sequence_number, bool* bSendPacket)
{
    CUserCmd* m_pcmd = m_input()->GetUserCmd(sequence_number);

    if (!m_pcmd || !m_pcmd->m_command_number)
        return false;
    if (!g_ctx.local()->is_alive())
        return false;


    g_ctx.send_packet = bSendPacket;
    return true;
}

void __stdcall hooks::hooked_createmove(int sequence_number, float input_sample_frametime, bool active, bool& bSendPacket)
{
    static auto original_fn = hooks::client_hook->get_func_address <CreateMove_t>(22);
    original_fn(m_client(), sequence_number, input_sample_frametime, active);
    g_ctx.local((player_t*)m_entitylist()->GetClientEntity(m_engine()->GetLocalPlayer()), true);

    CUserCmd* m_pcmd = m_input()->GetUserCmd(sequence_number);
    CVerifiedUserCmd* verified = m_input()->GetVerifiedUserCmd(sequence_number);

    g_ctx.globals.in_createmove = false;


    if (!verified || !SetupPacket(sequence_number, &bSendPacket))
        return original_fn(m_client(), sequence_number, input_sample_frametime, active);

    if (original_fn)
    {
        m_prediction()->SetLocalViewAngles(m_pcmd->m_viewangles);
        m_engine()->SetViewAngles(m_pcmd->m_viewangles);
    }


    /*if (!m_pcmd)
        return original_fn(m_clientmode(), smt, m_pcmd);

    if (!m_pcmd->m_command_number)
        return original_fn(m_clientmode(), smt, m_pcmd);

    auto original_result = original_fn(m_clientmode(), smt, m_pcmd);

    if (original_result)
    {
        m_prediction()->SetLocalViewAngles(m_pcmd->m_viewangles);
        m_engine()->SetViewAngles(m_pcmd->m_viewangles);
    }
    */

    if (!g_ctx.available())
        return;

    /*static uintptr_t gameoverlay_return_address = 0;

    if (!gameoverlay_return_address) {
        MEMORY_BASIC_INFORMATION info;
        VirtualQuery(_ReturnAddress(), &info, sizeof(MEMORY_BASIC_INFORMATION));

        char mod[MAX_PATH];
        GetModuleFileNameA((HMODULE)info.AllocationBase, mod, MAX_PATH);

        if (strstr(mod, crypt_str("gameoverlay")))
            gameoverlay_return_address = (uintptr_t)(_ReturnAddress());
    }

    if (gameoverlay_return_address != (uintptr_t)(_ReturnAddress()) && g_cfg.menu.obs_bypass)
        return hooked_sceneend;
        */

    misc::get().rank_reveal();
    spammers::get().clan_tag();
    misc::get().ChatSpammer();

    if (!g_ctx.local()->is_alive()) //-V807
        return;

    uintptr_t* frame_ptr;
    __asm mov frame_ptr, ebp;

    g_ctx.globals.weapon = g_ctx.local()->m_hActiveWeapon().Get();

    if (!g_ctx.globals.weapon)
        return;

    g_ctx.globals.in_createmove = true;
    g_ctx.set_command(m_pcmd);

    if (hooks::menu_open && g_ctx.globals.focused_on_input)
    {
        m_pcmd->m_buttons = 0;
        m_pcmd->m_forwardmove = 0.0f;
        m_pcmd->m_sidemove = 0.0f;
        m_pcmd->m_upmove = 0.0f;
    }

    /*static auto should_recharge = false;

    if (should_recharge)
    {
        ++g_ctx.globals.ticks_allowed;

        m_pcmd->m_tickcount = INT_MAX;
        m_pcmd->m_forwardmove = 0.0f;
        m_pcmd->m_sidemove = 0.0f;
        m_pcmd->m_upmove = 0.0f;
        m_pcmd->m_buttons &= ~IN_ATTACK;
        m_pcmd->m_buttons &= ~IN_ATTACK2;

        if (g_ctx.globals.ticks_allowed >= 16)
        {
            should_recharge = false;
            *(bool*)(*frame_ptr - 0x34) = true;
        }
        else
            *(bool*)(*frame_ptr - 0x34) = false;

        return;
    }
    */

    if (g_ctx.globals.ticks_allowed < 16 && (exploit::get().double_tap_enabled && exploit::get().double_tap_key || exploit::get().hide_shots_enabled && exploit::get().hide_shots_key))
        g_ctx.globals.should_recharge = true;

    g_ctx.globals.backup_tickbase = g_ctx.local()->m_nTickBase();

    if (g_ctx.globals.next_tickbase_shift)
        g_ctx.globals.fixed_tickbase = g_ctx.local()->m_nTickBase() - g_ctx.globals.next_tickbase_shift;
    else
        g_ctx.globals.fixed_tickbase = g_ctx.globals.backup_tickbase;

    if (hooks::menu_open)
    {
        m_pcmd->m_buttons &= ~IN_ATTACK;
        m_pcmd->m_buttons &= ~IN_ATTACK2;
    }

    if (m_pcmd->m_buttons & IN_ATTACK2 && g_cfg.ragebot.enable && g_ctx.globals.weapon->m_iItemDefinitionIndex() == WEAPON_REVOLVER)
        m_pcmd->m_buttons &= ~IN_ATTACK2;

    if (g_cfg.ragebot.enable && !g_ctx.globals.weapon->can_fire(true))
    {
        if (m_pcmd->m_buttons & IN_ATTACK && !g_ctx.globals.weapon->is_non_aim() && g_ctx.globals.weapon->m_iItemDefinitionIndex() != WEAPON_REVOLVER)
            m_pcmd->m_buttons &= ~IN_ATTACK;
        else if ((m_pcmd->m_buttons & IN_ATTACK || m_pcmd->m_buttons & IN_ATTACK2) && (g_ctx.globals.weapon->is_knife() || g_ctx.globals.weapon->m_iItemDefinitionIndex() == WEAPON_REVOLVER) && g_ctx.globals.weapon->m_iItemDefinitionIndex() != WEAPON_HEALTHSHOT)
        {
            if (m_pcmd->m_buttons & IN_ATTACK)
                m_pcmd->m_buttons &= ~IN_ATTACK;

            if (m_pcmd->m_buttons & IN_ATTACK2)
                m_pcmd->m_buttons &= ~IN_ATTACK2;
        }
    }

    if (m_pcmd->m_buttons & IN_FORWARD && m_pcmd->m_buttons & IN_BACK)
    {
        m_pcmd->m_buttons &= ~IN_FORWARD;
        m_pcmd->m_buttons &= ~IN_BACK;
    }

    if (m_pcmd->m_buttons & IN_MOVELEFT && m_pcmd->m_buttons & IN_MOVERIGHT)
    {
        m_pcmd->m_buttons &= ~IN_MOVELEFT;
        m_pcmd->m_buttons &= ~IN_MOVERIGHT;
    }

    bSendPacket = true;

    //g_ctx.send_packet = true;
    g_ctx.globals.tickbase_shift = 0;
    g_ctx.globals.double_tap_fire = false;
    g_ctx.globals.force_send_packet = false;
    g_ctx.globals.exploits = exploit::get().double_tap_key || exploit::get().hide_shots_key;
    g_ctx.globals.current_weapon = g_ctx.globals.weapon->get_weapon_group(g_cfg.ragebot.enable);
    g_ctx.globals.slowwalking = false;
    g_ctx.globals.original_forwardmove = m_pcmd->m_forwardmove;
    g_ctx.globals.original_sidemove = m_pcmd->m_sidemove;

    antiaim::get().breaking_lby = false;

    auto wish_angle = m_pcmd->m_viewangles;

    misc::get().fast_stop(m_pcmd);

    if (g_cfg.misc.bunnyhop)
        bunnyhop::get().create_move();

    misc::get().SlideWalk(m_pcmd);

    misc::get().NoDuck(m_pcmd);

    misc::get().AutoCrouch(m_pcmd);

    GrenadePrediction::get().Tick(m_pcmd->m_buttons);

    if (g_cfg.misc.crouch_in_air && !(g_ctx.local()->m_fFlags() & FL_ONGROUND))
        m_pcmd->m_buttons |= IN_DUCK;

    engineprediction::get().prediction_data.reset(); //-V807
    engineprediction::get().setup();

    g_ctx.globals.override_velmod = true;
    engineprediction::get().predict(m_pcmd);

    g_ctx.globals.eye_pos = g_ctx.local()->get_shoot_position();

    if (g_cfg.misc.airstrafe)
        airstrafe::get().create_move(m_pcmd);

    if (key_binds::get().get_key_bind_state(19) && engineprediction::get().backup_data.flags & FL_ONGROUND && !(g_ctx.local()->m_fFlags() & FL_ONGROUND)) //-V807
        m_pcmd->m_buttons |= IN_JUMP;

    if (key_binds::get().get_key_bind_state(21))
        slowwalk::get().create_move(m_pcmd);

    if (g_ctx.globals.should_recharge)
        fakelag::get().Createmove();

    g_ctx.globals.aimbot_working = false;
    g_ctx.globals.revolver_working = false;

    auto backup_velocity = g_ctx.local()->m_vecVelocity();
    auto backup_abs_velocity = g_ctx.local()->m_vecAbsVelocity();

    g_ctx.local()->m_vecVelocity() = engineprediction::get().backup_data.velocity;
    g_ctx.local()->m_vecAbsVelocity() = engineprediction::get().backup_data.velocity;

    g_ctx.globals.weapon->update_accuracy_penality();

    g_ctx.local()->m_vecVelocity() = backup_velocity;
    g_ctx.local()->m_vecAbsVelocity() = backup_abs_velocity;

    g_ctx.globals.inaccuracy = g_ctx.globals.weapon->get_inaccuracy();
    g_ctx.globals.spread = g_ctx.globals.weapon->get_spread();

    aim::get().run(m_pcmd);
    legit_bot::get().createmove(m_pcmd);

    zeusbot::get().run(m_pcmd);
    knifebot::get().run(m_pcmd);

    exploit::get().createmove(m_pcmd);

    misc::get().automatic_peek(m_pcmd, wish_angle.y);
    misc::get().break_prediction(m_pcmd);

    antiaim::get().desync_angle = 0.0f;
    antiaim::get().create_move(m_pcmd);

    if (m_gamerules()->m_bIsValveDS() && m_clientstate()->iChokedCommands >= 6) //-V648
    {
        bSendPacket = true;
        fakelag::get().started_peeking = false;
    }
    else if (!m_gamerules()->m_bIsValveDS() && m_clientstate()->iChokedCommands >= 16) //-V648
    {
        bSendPacket = true;
        fakelag::get().started_peeking = false;
    }

    if (g_ctx.globals.should_send_packet)
    {
        g_ctx.globals.force_send_packet = true;
        bSendPacket = true;
        fakelag::get().started_peeking = false;
    }

    if (g_ctx.globals.should_choke_packet)
    {
        g_ctx.globals.should_choke_packet = false;
        g_ctx.globals.should_send_packet = true;
        bSendPacket = false;
    }

    if (!g_ctx.globals.weapon->is_non_aim())
    {
        auto double_tap_aim_check = false;

        if (m_pcmd->m_buttons & IN_ATTACK && g_ctx.globals.double_tap_aim_check)
        {
            double_tap_aim_check = true;
            g_ctx.globals.double_tap_aim_check = false;
        }

        auto revolver_shoot = g_ctx.globals.weapon->m_iItemDefinitionIndex() == WEAPON_REVOLVER && !g_ctx.globals.revolver_working && (m_pcmd->m_buttons & IN_ATTACK || m_pcmd->m_buttons & IN_ATTACK2);

        if (m_pcmd->m_buttons & IN_ATTACK && g_ctx.globals.weapon->m_iItemDefinitionIndex() != WEAPON_REVOLVER || revolver_shoot)
        {
            static auto weapon_recoil_scale = m_cvar()->FindVar(crypt_str("weapon_recoil_scale"));

            // norecoil.
            if (g_cfg.ragebot.remove_recoil)
                m_pcmd->m_viewangles -= g_ctx.local()->m_aimPunchAngle() * weapon_recoil_scale->GetFloat();

            if (!g_ctx.globals.fakeducking)
            {
                g_ctx.globals.force_send_packet = true;
                g_ctx.globals.should_choke_packet = true;
                bSendPacket = true;
                fakelag::get().started_peeking = false;
            }

            aim::get().last_shoot_position = g_ctx.globals.eye_pos;

            if (!double_tap_aim_check)
                g_ctx.globals.double_tap_aim = false;
        }
    }
    else if (!g_ctx.globals.fakeducking && g_ctx.globals.weapon->is_knife() && (m_pcmd->m_buttons & IN_ATTACK || m_pcmd->m_buttons & IN_ATTACK2))
    {
        g_ctx.globals.force_send_packet = true;
        g_ctx.globals.should_choke_packet = true;
        bSendPacket = true;
        fakelag::get().started_peeking = false;
    }

    if (g_ctx.globals.fakeducking)
        g_ctx.globals.force_send_packet = bSendPacket;

    for (auto& backup : aim::get().backup)
        backup.adjust_player();

    auto backup_ticks_allowed = g_ctx.globals.ticks_allowed;

    if (exploit::get().double_tap(m_pcmd))
        exploit::get().hide_shots(m_pcmd, false);
    else
    {
        g_ctx.globals.ticks_allowed = backup_ticks_allowed;
        exploit::get().hide_shots(m_pcmd, true);
    }

    if (!g_ctx.globals.weapon->is_non_aim())
    {
        auto double_tap_aim_check = false;

        if (m_pcmd->m_buttons & IN_ATTACK && g_ctx.globals.double_tap_aim_check)
        {
            double_tap_aim_check = true;
            g_ctx.globals.double_tap_aim_check = false;
        }

        auto revolver_shoot = g_ctx.globals.weapon->m_iItemDefinitionIndex() == WEAPON_REVOLVER && !g_ctx.globals.revolver_working && (m_pcmd->m_buttons & IN_ATTACK || m_pcmd->m_buttons & IN_ATTACK2);

        if (!double_tap_aim_check && m_pcmd->m_buttons & IN_ATTACK && g_ctx.globals.weapon->m_iItemDefinitionIndex() != WEAPON_REVOLVER || revolver_shoot)
            g_ctx.globals.double_tap_aim = false;
    }

    if (m_globals()->m_tickcount - g_ctx.globals.last_aimbot_shot > 16) //-V807
    {
        g_ctx.globals.double_tap_aim = false;
        g_ctx.globals.double_tap_aim_check = false;
    }

    engineprediction::get().finish();
    //g_ctx.globals.override_velmod = false;

    if (g_ctx.globals.loaded_script)
        for (auto current : c_lua::get().hooks.getHooks(crypt_str("on_createmove")))
            current.func();

    if (g_cfg.misc.anti_untrusted)
        math::normalize_angles(m_pcmd->m_viewangles);
    else
    {
        m_pcmd->m_viewangles.y = math::normalize_yaw(m_pcmd->m_viewangles.y);
        m_pcmd->m_viewangles.z = 0.0f;
    }

    util::movement_fix(wish_angle, m_pcmd);

    if (g_ctx.globals.should_recharge)
        bSendPacket = true;

    static auto previous_ticks_allowed = g_ctx.globals.ticks_allowed;

    /*if (g_ctx.send_packet && m_clientstate()->pNetChannel)
    {
        auto choked_packets = m_clientstate()->pNetChannel->m_nChokedPackets;

        if (choked_packets >= 0)
        {
            auto ticks_allowed = g_ctx.globals.ticks_allowed;
            auto command_number = m_pcmd->m_command_number - choked_packets;

            do
            {
                auto command = &m_input()->m_pCommands[m_pcmd->m_command_number - MULTIPLAYER_BACKUP * (command_number / MULTIPLAYER_BACKUP) - choked_packets];

                if (!command || command->m_tickcount > m_globals()->m_tickcount + 72)
                {
                    if (--ticks_allowed < 0)
                        ticks_allowed = 0;

                    g_ctx.globals.ticks_allowed = ticks_allowed;
                }

                ++command_number;
                --choked_packets;
            } while (choked_packets >= 0);
        }
    }
    */

    if (g_ctx.globals.ticks_allowed > 17)
        g_ctx.globals.ticks_allowed = math::clamp(g_ctx.globals.ticks_allowed - 1, 0, 17);

    if (previous_ticks_allowed && !g_ctx.globals.ticks_allowed)
        g_ctx.globals.ticks_choke = 16;

    previous_ticks_allowed = g_ctx.globals.ticks_allowed;

    if (g_ctx.globals.ticks_choke)
    {
        bSendPacket - g_ctx.globals.force_send_packet;
        --g_ctx.globals.ticks_choke;
    }

    auto& correct = g_ctx.globals.data.emplace_front();

    correct.command_number = m_pcmd->m_command_number;
    correct.choked_commands = m_clientstate()->iChokedCommands + 1;
    correct.tickcount = m_globals()->m_tickcount;

    if (bSendPacket)
        g_ctx.globals.choked_number.clear();
    else
        g_ctx.globals.choked_number.emplace_back(correct.command_number);

    while (g_ctx.globals.data.size() > (int)(2.0f / m_globals()->m_intervalpertick))
        g_ctx.globals.data.pop_back();

    auto& out = g_ctx.globals.commands.emplace_back();

    out.is_outgoing = bSendPacket;
    out.is_used = false;
    out.command_number = m_pcmd->m_command_number;
    out.previous_command_number = 0;

    while (g_ctx.globals.commands.size() > (int)(1.0f / m_globals()->m_intervalpertick))
        g_ctx.globals.commands.pop_front();

    /*if (!g_ctx.send_packet && !m_gamerules()->m_bIsValveDS())
    {
        auto net_channel = m_clientstate()->pNetChannel;

        if (net_channel->m_nChokedPackets > 0 && !(net_channel->m_nChokedPackets % 4))
        {
            auto backup_choke = net_channel->m_nChokedPackets;
            net_channel->m_nChokedPackets = 0;

            net_channel->send_datagram();
            --net_channel->m_nOutSequenceNr;

            net_channel->m_nChokedPackets = backup_choke;
        }
    }
    */

    if (bSendPacket && !g_ctx.globals.should_send_packet && (!g_ctx.globals.should_choke_packet || (!exploit::get().hide_shots_enabled && !g_ctx.globals.double_tap_fire)))
    {
        local_animations::get().local_data.fake_angles = m_pcmd->m_viewangles; //-V807
        local_animations::get().local_data.real_angles = local_animations::get().local_data.stored_real_angles;
    }

    if (!antiaim::get().breaking_lby)
        local_animations::get().local_data.stored_real_angles = m_pcmd->m_viewangles;

    if (bSendPacket && g_ctx.globals.should_send_packet)
        g_ctx.globals.should_send_packet = false;

    if (g_cfg.misc.buybot_enable && g_ctx.globals.should_buy)
    {
        --g_ctx.globals.should_buy;

        if (!g_ctx.globals.should_buy)
        {
            std::string buy;

            switch (g_cfg.misc.buybot1)
            {
            case 1:
                buy += crypt_str("buy g3sg1; ");
                break;
            case 2:
                buy += crypt_str("buy awp; ");
                break;
            case 3:
                buy += crypt_str("buy ssg08; ");
                break;
            }

            switch (g_cfg.misc.buybot2)
            {
            case 1:
                buy += crypt_str("buy elite; ");
                break;
            case 2:
                buy += crypt_str("buy deagle; buy revolver; ");
                break;
            case 3:
                buy += crypt_str("buy tec9; buy fn57; ");
                break;
            case 4:
                buy += crypt_str("buy p250; ");
                break;
            }

            if (g_cfg.misc.buybot3[BUY_ARMOR])
                buy += crypt_str("buy vesthelm; buy vest; ");

            if (g_cfg.misc.buybot3[BUY_TASER])
                buy += crypt_str("buy taser; ");

            if (g_cfg.misc.buybot3[BUY_GRENADES])
                buy += crypt_str("buy molotov; buy hegrenade; buy smokegrenade; ");

            if (g_cfg.misc.buybot3[BUY_DEFUSER])
                buy += crypt_str("buy defuser; ");

            m_engine()->ExecuteClientCmd(buy.c_str());
        }
    }


    g_ctx.globals.in_createmove = false;

    //*(bool*)(*frame_ptr - 0x34) = bSendPacket;

    verified->m_cmd = *m_pcmd;
    verified->m_crc = m_pcmd->GetChecksum();
}

__declspec(naked) void __stdcall hooks::hooked_createmove_naked(int sequence_number, float input_sample_frametime, bool active)
{
    __asm
    {
        push ebx
        push esp
        push dword ptr[esp + 20]
        push dword ptr[esp + 0Ch + 8]
        push dword ptr[esp + 10h + 4]
        call hooked_createmove
        pop ebx
        retn 0Ch
    }
}
hooks.cpp

Посмотреть вложение 193311

ctx.hpp
Посмотреть вложение 193312
fakelag.cpp
g_ctx.send_packet replace with *g_ctx.send_packetПосмотреть вложение 193313
from about 67 lines to 214

Clua.cpp
Пожалуйста, авторизуйтесь для просмотра ссылки.
( no ad )
Antiaim.cpp
Пожалуйста, авторизуйтесь для просмотра ссылки.
( no ad )
hooked_runcommand.cpp
Пожалуйста, авторизуйтесь для просмотра ссылки.
(no ad)
Credits:: Abybachup,
Пожалуйста, авторизуйтесь для просмотра ссылки.
( no ad)
помогите ошибка
 
ЧВК EB_LAN
Забаненный
Статус
Оффлайн
Регистрация
12 Янв 2019
Сообщения
838
Реакции[?]
298
Поинты[?]
17K
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Это не так делается...
 
Эксперт
Статус
Оффлайн
Регистрация
30 Дек 2019
Сообщения
1,967
Реакции[?]
958
Поинты[?]
19K
Шо за крунж, мало того что ты в названии ошибку допустил, так ещё и в тему насрал(извините за грубость, скинул не самый лицеприятный код, залупу короч)
+ от того что ты юзаешь не то что нужно(clientstate вместо client) кс спасибо тебе не скажет( баля, я запятую пропустил (( )
 
(\ /) _ ($ __ $ ) _ (\ /)
Пользователь
Статус
Оффлайн
Регистрация
22 Окт 2021
Сообщения
368
Реакции[?]
92
Поинты[?]
24K
Шо за крунж, мало того что ты в названии ошибку допустил, так ещё и в тему насрал(извините за грубость, скинул не самый лицеприятный код, залупу короч)
+ от того что ты юзаешь не то что нужно(clientstate вместо client) кс спасибо тебе не скажет( баля, я запятую пропустил (( )
Увы, я начинающий кодер, спасибо за критику, я стараюсь над кодом, но я так вижу и для меня это самый лучший вариант на тот момент.
 
Эксперт
Статус
Оффлайн
Регистрация
30 Дек 2019
Сообщения
1,967
Реакции[?]
958
Поинты[?]
19K
я начинающий кодер
Сам себе противоречишь, если ты начинаешь КОДИТЬ, то зачем ты юзаешь легендвар, не проще использовать любую базу, чтобы понять как работают функции, и что они делают
 
(\ /) _ ($ __ $ ) _ (\ /)
Пользователь
Статус
Оффлайн
Регистрация
22 Окт 2021
Сообщения
368
Реакции[?]
92
Поинты[?]
24K
Сам себе противоречишь, если ты начинаешь КОДИТЬ, то зачем ты юзаешь легендвар, не проще использовать любую базу, чтобы понять как работают функции, и что они делают
я понимаю как они работают потому, что я начинал кодить еще с 2019 с БИГ КОДЕРОМ walter
 
(\ /) _ ($ __ $ ) _ (\ /)
Пользователь
Статус
Оффлайн
Регистрация
22 Окт 2021
Сообщения
368
Реакции[?]
92
Поинты[?]
24K
Эксперт
Статус
Оффлайн
Регистрация
30 Дек 2019
Сообщения
1,967
Реакции[?]
958
Поинты[?]
19K
сарказм. Или вам всегда нужно все в скобочки выводить? Ты наверное редко когда сарказм выкупаешь, ладно.
Просто я немного скоболюб( ну челик который обожает скобочки :CoolStoryBob: )
 
(\ /) _ ($ __ $ ) _ (\ /)
Пользователь
Статус
Оффлайн
Регистрация
22 Окт 2021
Сообщения
368
Реакции[?]
92
Поинты[?]
24K
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу