Гайд Обновляем реслоьвер в самоваре в1

Забаненный
Статус
Оффлайн
Регистрация
26 Июн 2018
Сообщения
51
Реакции[?]
20
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
дорова поцаны седня мы пихуем реслоьвер бамевара в ауувар

для начала я скажу что бы запастить это надо быть сверх разумом ибо скорее всего эта дичь крашит
Код:
int target = 0;
bool in_tp = false;
bool fake_walk = false;

int resolve_type[65];

int shots_fired[65];
int shots_hit[65];

int shots_missed[65];
float local_update;
float tick_to_back[65];
float lby_to_back[65];
bool backtrack_tick[65];

float lby_delta;
float update_time[65];

int hitmarker_time;

bool menu_hide;

int oldest_tick[65];
float compensate[65][12];
Vector backtrack_hitbox[65][20][12];
float backtrack_simtime[65][12];
bool using_fake_angles[65];
bool CResolver::IsFakingYaw(IClientEntity* entity)
{
    static float old_simtime[65];
    if (entity->GetSimTime() != old_simtime[entity->GetIndex()])
    {
        using_fake_angles[entity->GetIndex()] = entity->GetSimTime() - old_simtime[entity->GetIndex()] == m_pGlobals->interval_per_tick; entity->GetSimTime() - old_simtime[entity->GetIndex()] >= TICKS_TO_TIME(2);
        old_simtime[entity->GetIndex()] = entity->GetSimTime();
    }

    auto &info = player_info[entity->GetIndex()];

    if (!using_fake_angles[entity->GetIndex()])
    {
        if (backtrack_tick[entity->GetIndex()])
        {
            resolve_type[entity->GetIndex()] = 7;
            entity->SetEyeAngles(info.backtrack);
        }

        return true;
    }
}
enum CSGO_ACTS
{
    ACT_CSGO_DEFUSE = 958,
    ACT_CSGO_DEFUSE_WITH_KIT = 959,
    ACT_CSGO_FLASHBANG_REACTION = 960,
    ACT_CSGO_FIRE_PRIMARY = 961, // when shooting
    ACT_CSGO_FIRE_PRIMARY_OPT_1 = 962,
    ACT_CSGO_FIRE_PRIMARY_OPT_2 = 963,
    ACT_CSGO_FIRE_SECONDARY = 964, // shooting secondary
    ACT_CSGO_RELOAD = 967,
    ACT_CSGO_RELOAD_START = 968,
    ACT_CSGO_RELOAD_LOOP = 969,
    ACT_CSGO_RELOAD_END = 970,
    ACT_CSGO_PLANT_BOMB = 978,
    ACT_CSGO_IDLE_TURN_BALANCEADJUST = 979,
    ACT_CSGO_IDLE_ADJUST_STOPPEDMOVING = 980,
};
void CResolver::AddShotSnapshot(IClientEntity* entity, PlayerResolveRecord resolve_record)
{
    ShotSnapshot snapshot;

    snapshot.entity = entity;
    snapshot.time = UTILS::GetCurtime();
    snapshot.resolve_record = resolve_record;
    snapshot.first_processed_time = 0.f;
    snapshot.was_shot_processed = false;
    snapshot.hitgroup_hit = -1;

    shot_snapshots.push_back(snapshot);
}
void CResolver::UpdateResolveRecord(IClientEntity* entity)
{
    /// a copy of the previous record for comparisons and shit
    const auto previous_record = player_resolve_records[entity->GetIndex()];
    auto& record = player_resolve_records[entity->GetIndex()];

    record.resolved_angles = record.networked_angles;
    record.velocity = entity->GetVelocity();
    record.origin = entity->GetVecOrigin();
    record.lower_body_yaw = entity->GetLowerBodyYaw();
    record.is_dormant = entity->IsDormant();
    record.has_fake = IsFakingYaw(entity);
    record.resolve_type = 0;

    record.is_balance_adjust_triggered = false, record.is_balance_adjust_playing = false;
    for (int i = 0; i < 15; i++) /// go through each animation layer
    {
        record.anim_layers[i] = entity->GetAnimOverlay(i);

        /// balanceadjust act
        if (entity->GetSequenceActivity(record.anim_layers[i].m_nSequence) == CSGO_ACTS::ACT_CSGO_IDLE_TURN_BALANCEADJUST)
        {
            record.is_balance_adjust_playing = true;

            /// balance adjust is being triggered
            if (record.anim_layers[i].m_flWeight == 1 || record.anim_layers[i].m_flCycle > previous_record.anim_layers[i].m_flCycle)
                record.last_balance_adjust_trigger_time = UTILS::GetCurtime();
            if (fabs(UTILS::GetCurtime() - record.last_balance_adjust_trigger_time) < 0.5f)
                record.is_balance_adjust_triggered = true;
        }
    }

    if (record.is_dormant)
        record.next_predicted_lby_update = FLT_MAX;

    /// if lby updated
    if (record.lower_body_yaw != previous_record.lower_body_yaw && !record.is_dormant && !previous_record.is_dormant)
        record.did_lby_flick = true;

    /// fakewalk
    const bool is_moving_on_ground = record.velocity.Length2D() > 0.34f && entity->GetFlags() & FL_ONGROUND;
    if (is_moving_on_ground && record.is_balance_adjust_triggered)
        record.is_fakewalking = true;
    else
        record.is_fakewalking = false;

    /// last moving lby, using a high velocity check ***just in case*** of fakewalkers
    if (is_moving_on_ground && !record.is_fakewalking && record.velocity.Length2D() > 1.f && !record.is_dormant)
    {
        record.is_last_moving_lby_valid = true;
        record.is_last_moving_lby_delta_valid = false;
        record.shots_missed_moving_lby = 0;
        record.shots_missed_moving_lby_delta = 0;
        record.last_moving_lby = record.lower_body_yaw + 45;
        record.last_time_moving = UTILS::GetCurtime();
    }

    /// just came out of dormancy
    if (!record.is_dormant && previous_record.is_dormant)
    {
        /// if moved more than 32 units
        if ((record.origin - previous_record.origin).Length2D() > 16.f)
            record.is_last_moving_lby_valid = false;
    }

    /// get last moving lby delta
    if (!record.is_last_moving_lby_delta_valid && record.is_last_moving_lby_valid && record.velocity.Length2D() < 20 && fabs(UTILS::GetCurtime() - record.last_time_moving) < 1.0)
    {
        /// if lby updated
        if (record.lower_body_yaw != previous_record.lower_body_yaw)
        {
            record.last_moving_lby_delta = game::math.NormalizeYaw(record.last_moving_lby - record.lower_body_yaw);
            record.is_last_moving_lby_delta_valid = true;
        }
    }

    if (game::math.NormalizePitch(record.networked_angles.x) > 5.f)
        record.last_time_down_pitch = UTILS::GetCurtime();
}
float CResolver::ResolveYawOverride(IClientEntity* entity)
{
    auto local_player = game::localdata.localplayer();
    if (!local_player)
        return FLT_MAX;

    if (resolverconfig.bResolverOverride && GetAsyncKeyState(resolverconfig.iResolverOverrideKey)) {
        return FLT_MAX;

        Vector viewangles;
        m_pEngine->GetViewAngles(viewangles);

        const float at_target_yaw = game::math.CalcAnglevector(local_player->GetVecOrigin(), entity->GetVecOrigin()).y;
        if (fabs(game::math.NormalizeYaw(viewangles.y - at_target_yaw)) > 10.f)
            return FLT_MAX;

        return game::math.GetLBYRotatedYaw(entity->GetLowerBodyYaw(), (game::math.NormalizeYaw(viewangles.y - at_target_yaw) > 0) ? at_target_yaw + 90.f : at_target_yaw - 90.f);
    }
}
bool CResolver::IsYawSideways(IClientEntity* entity, float yaw)
{
    auto local_player = game::localdata.localplayer();
    if (!local_player)
        return false;

    const auto at_target_yaw = game::math.CalcAnglevector(local_player->GetVecOrigin(), entity->GetVecOrigin()).y;
    const float delta = fabs(game::math.NormalizeYaw(at_target_yaw - yaw));

    return delta > 20.f && delta < 160.f;
}
bool CResolver::AntiFreestanding(IClientEntity* entity, float& yaw)
{
    const auto freestanding_record = player_resolve_records[entity->GetIndex()].anti_freestanding_record;

    auto local_player = game::localdata.localplayer();
    if (!local_player)
        return false;

    if (freestanding_record.left_damage >= 20 && freestanding_record.right_damage >= 20)
        return false;

    const float at_target_yaw = game::math.CalcAnglevector(local_player->GetVecOrigin(), entity->GetVecOrigin()).y;
    if (freestanding_record.left_damage <= 0 && freestanding_record.right_damage <= 0)
    {
        if (freestanding_record.right_fraction < freestanding_record.left_fraction)
            yaw = at_target_yaw + 125.f;
        else
            yaw = at_target_yaw - 73.f;
    }
    else
    {
        if (freestanding_record.left_damage > freestanding_record.right_damage)
            yaw = at_target_yaw + 130.f;
        else
            yaw = at_target_yaw - 49.f;
    }

    return true;
}
void CResolver::ResolveYaw(IClientEntity* entity)
{
    auto& resolve_record = player_resolve_records[entity->GetIndex()];

    if (resolve_record.did_lby_flick)
    {
        resolve_record.resolved_angles.y = resolve_record.lower_body_yaw;
        resolve_record.resolve_type |= RESOLVE_TYPE_LBY_UPDATE;
    }
    else if (resolve_record.did_predicted_lby_flick)
    {
        resolve_record.resolved_angles.y = resolve_record.last_moving_lby + resolve_record.last_moving_lby_delta;
        resolve_record.resolve_type |= RESOLVE_TYPE_PREDICTED_LBY_UPDATE;
    }
    else
    {
        const float override_yaw = ResolveYawOverride(entity);
        if (override_yaw != FLT_MAX)
        {
            resolve_record.resolved_angles.y = override_yaw;
            resolve_record.resolve_type |= RESOLVE_TYPE_OVERRIDE;
        }
        else if (IsMovingOnGround(entity)) /// moving
        {
            resolve_record.resolved_angles.y = resolve_record.last_moving_lby;
            resolve_record.resolve_type |= RESOLVE_TYPE_LBY;
        }
        else if (resolve_record.is_last_moving_lby_valid && resolve_record.shots_missed_moving_lby < 1 && IsYawSideways(entity, resolve_record.last_moving_lby)) /// last moving lby if sideways prioritizes over antiurine
        {
            resolve_record.resolved_angles.y = resolve_record.last_moving_lby;
            resolve_record.resolve_type |= RESOLVE_TYPE_LAST_MOVING_LBY;
        }
        else if (AntiFreestanding(entity, resolve_record.resolved_angles.y))
        {
            resolve_record.resolve_type |= RESOLVE_TYPE_ANTI_FREESTANDING;
        }
        else if (resolve_record.is_last_moving_lby_valid && resolve_record.shots_missed_moving_lby < 1) /// last moving lby
        {
            resolve_record.resolved_angles.y = resolve_record.last_moving_lby;
            resolve_record.resolve_type |= RESOLVE_TYPE_LAST_MOVING_LBY;
        }
        else /// bruteforce as last resort
            ResolveYawBruteforce(entity);


    }

}
int CResolver::GetResolveTypeIndex(unsigned short resolve_type)
{
    /// gonna have to use lorge if statements cuz fuck you
    if (resolve_type & RESOLVE_TYPE_OVERRIDE)
        return 0;
    else if (resolve_type & RESOLVE_TYPE_NO_FAKE)
        return 1;
    else if (resolve_type & RESOLVE_TYPE_LBY)
        return 2;
    else if (resolve_type & RESOLVE_TYPE_LBY_UPDATE)
        return 3;
    else if (resolve_type & RESOLVE_TYPE_PREDICTED_LBY_UPDATE)
        return 4;
    else if (resolve_type & RESOLVE_TYPE_LAST_MOVING_LBY)
        return 5;
    else if (resolve_type & RESOLVE_TYPE_NOT_BREAKING_LBY)
        return 6;
    else if (resolve_type & RESOLVE_TYPE_BRUTEFORCE)
        return 7;
    else if (resolve_type & RESOLVE_TYPE_LAST_MOVING_LBY_DELTA)
        return 8;
    else if (resolve_type & RESOLVE_TYPE_ANTI_FREESTANDING)
        return 9;

    return 0;
}
void CResolver::ResolveYawBruteforce(IClientEntity* entity)
{
    auto local_player = game::localdata.localplayer();
    if (!local_player)
        return;

    auto& resolve_record = player_resolve_records[entity->GetIndex()];
    resolve_record.resolve_type |= RESOLVE_TYPE_BRUTEFORCE;

    const float at_target_yaw = game::math.CalcAnglevector(entity->GetVecOrigin(), local_player->GetVecOrigin()).y;

    const int shots_missed = resolve_record.shots_fired[GetResolveTypeIndex(resolve_record.resolve_type)] -
        resolve_record.shots_hit[GetResolveTypeIndex(resolve_record.resolve_type)];
    switch (shots_missed % 3)
    {
    case 0:
        resolve_record.resolved_angles.y = game::math.GetLBYRotatedYaw(entity->GetLowerBodyYaw(), at_target_yaw + 60.f);
        break;
    case 1:
        resolve_record.resolved_angles.y = at_target_yaw + 140.f;
        break;
    case 2:
        resolve_record.resolved_angles.y = at_target_yaw - 75.f;
        break;
    }
}
void CResolver::DoFSN()
{

    auto local_player = game::localdata.localplayer();
    if (!local_player || local_player->GetHealth() <= 0)
        return;

    for (int i = 0; i < m_pGlobals->maxClients; i++)
    {
        auto entity = m_pEntityList->GetClientEntity(i);
        if (!entity || entity->GetHealth() <= 0 || entity->GetTeamNum() == local_player->GetTeamNum() || !entity->IsAlive())
            continue;

        UpdateResolveRecord(entity);

        /// make sure to do dormant check AFTER calling UpdateResolveRecord()
        if (entity->IsDormant())
            continue;

        ResolveYaw(entity);
        ResolvePitch(entity);

        const auto resolve_record = player_resolve_records[i];
        entity->GetEyeAngles(resolve_record.resolved_angles);
    }
}





void CResolver::ResolvePitch(IClientEntity* entity)
{
    auto& resolve_record = player_resolve_records[entity->GetIndex()];

    if (resolve_record.resolve_type & RESOLVE_TYPE_LBY_UPDATE || resolve_record.resolve_type & RESOLVE_TYPE_PREDICTED_LBY_UPDATE ||
        resolve_record.resolve_type & RESOLVE_TYPE_NO_FAKE)
        resolve_record.resolved_angles.x = resolve_record.networked_angles.x;
    else
    {
        /// super fucking ghetto fix to stop their pitch from going to 0 when they're shooting (only neccesary when they're using psilent)
        if (fabs(UTILS::GetCurtime() - resolve_record.last_time_down_pitch) < 0.5f)
            resolve_record.resolved_angles.x = 70.f;
        else
            resolve_record.resolved_angles.x = resolve_record.networked_angles.x;
    }

    resolve_record.resolved_angles.x = game::math.NormalizePitch(resolve_record.resolved_angles.x);
}

Vector old_calcangle(Vector dst, Vector src)
{
    Vector angles;

    double delta[3] = { (src.x - dst.x), (src.y - dst.y), (src.z - dst.z) };
    double hyp = sqrt(delta[0] * delta[0] + delta[1] * delta[1]);
    angles.x = (float)(atan(delta[2] / hyp) * 180.0 / 3.14159265);
    angles.y = (float)(atanf(delta[1] / delta[0]) * 57.295779513082f);
    angles.z = 0.0f;

    if (delta[0] >= 0.0)
    {
        angles.y += 180.0f;
    }

    return angles;
}

float old_normalize(float Yaw)
{
    if (Yaw > 180)
    {
        Yaw -= (round(Yaw / 360) * 360.f);
    }
    else if (Yaw < -180)
    {
        Yaw += (round(Yaw / 360) * -360.f);
    }
    return Yaw;
}

float curtime(CUserCmd* ucmd) {
    auto local_player = game::localdata.localplayer();

    if (!local_player)
        return 0;

    int g_tick = 0;
    CUserCmd* g_pLastCmd = nullptr;
    if (!g_pLastCmd || g_pLastCmd->hasbeenpredicted) {
        g_tick = (float)local_player->GetTickBase();
    }
    else {
        ++g_tick;
    }
    g_pLastCmd = ucmd;
    float curtime = g_tick * m_pGlobals->interval_per_tick;
    return curtime;
}

bool find_layer(IClientEntity* entity, int act, CAnimationLayer *set)
{
    for (int i = 0; i < 13; i++)
    {
        CAnimationLayer layer = entity->GetAnimOverlay(i);
        const int activity = entity->GetSequenceActivity(layer.m_nSequence);
        if (activity == act) {
            *set = layer;
            return true;
        }
    }
    return false;
}

void CResolver::record(IClientEntity* entity, float new_yaw)
{
    if (entity->GetVelocity().Length2D() > 36)
        return;
    auto local_player = game::localdata.localplayer();
    auto c_baseweapon = reinterpret_cast<CBaseAttributableItem*>(m_pEntityList->GetClientEntity(local_player->GetActiveWeaponIndex()));

    if (!c_baseweapon)
        return;

    auto &info = player_info[entity->GetIndex()];

    if (entity->GetActiveWeaponIndex() && info.last_ammo < c_baseweapon->GetLoadedAmmo())
    {
        //ignore the yaw when it is from shooting (will be looking at you/other player)
        info.last_ammo = c_baseweapon->GetLoadedAmmo();
        return;
    }

    info.unresolved_yaw.insert(info.unresolved_yaw.begin(), new_yaw);
    if (info.unresolved_yaw.size() > 20) {
        info.unresolved_yaw.pop_back();
    }

    if (info.unresolved_yaw.size() < 2)
        return;

    auto average_unresolved_yaw = 0;
    for (auto val : info.unresolved_yaw)
        average_unresolved_yaw += val;
    average_unresolved_yaw /= info.unresolved_yaw.size();

    int delta = average_unresolved_yaw - entity->GetLowerBodyYaw();
    auto big_math_delta = abs((((delta + 180) % 360 + 360) % 360 - 180));

    info.lby_deltas.insert(info.lby_deltas.begin(), big_math_delta);
    if (info.lby_deltas.size() > 10) {
        info.lby_deltas.pop_back();
    }
}


auto IsViable(IClientEntity * pPlayer) -> bool
{
    if (!pPlayer)
        return false;

    auto local_player = game::localdata.localplayer();

    if (!local_player)
        return false;

    if (pPlayer->IsDormant() || (pPlayer->GetHealth() <= 0) || pPlayer->GetFlags() & FL_FROZEN)
        return false;

    auto pWeapon = pPlayer->GetActiveWeaponIndex();

    if (!pWeapon)
        return false;

    if (pPlayer->GetTeamNum() == local_player->GetTeamNum())
        return false;

    return true;
}
#define TICK_INTERVAL            (ctx::globals->interval_per_tick)
int latest_tick;
#define TIME_TO_TICKS( dt )        ( (int)( 0.5f + (float)(dt) / TICK_INTERVAL ) )

bool IsTickValid(int tick) {
    int delta = latest_tick - tick;
    float deltaTime = delta * m_pGlobals->interval_per_tick;
    return (fabs(deltaTime) <= 0.1f);
}



void CResolver::resolve(IClientEntity* entity)
{

    auto local_player = game::localdata.localplayer();

    if (!entity)
        return;

    if (!local_player)
        return;

    bool is_local_player = entity == local_player;
    bool is_teammate = local_player->GetTeamNum() == entity->GetTeamNum() && !is_local_player;

    if (is_local_player)
        return;

    if (is_teammate)
        return;

    if (entity->GetHealth() <= 0)
        return;

    if (local_player->GetHealth() <= 0)
        return;
    DoFSN();
}
Код:
#pragma once

namespace sdk
{
    class CUserCmd;
    class CBaseEntity;
    class CBaseWeapon;
}

struct Info
{
    Info() {}

    SDK::CAnimationLayer backup_layer, prev_layer;
    Vector last_lby, inverse, inverse_right, inverse_left, lby, back, left, right, backtrack;
    float stored_simtime, last_move_time, pre_anim_lby;
    int last_ammo;
    bool breaking_lby, reset_state, could_be_faking;
    std::vector<float> unresolved_yaw, lby_deltas;

    bool lby_changed;
    bool could_be_slowmo;
    bool is_moving;
    bool is_standing;
    bool is_fakewalking;
    bool is_jumping;
    bool is_crouching;
    bool lby_updated;
    bool using_fake_angles;
    float last_moving_lby;
    float stored_lby;
    float next_lby_update_time;
    int stored_missed;
};


class CResolver
{
public:
    Info player_info[65];
    void DoFSN();
    void record(SDK::CBaseEntity * entity, float new_yaw);
    //    void NoSpreade(SDK::CBaseEntity * player, int entID);
    //    void override(SDK::CBaseEntity * entity);
    void Nospread1(SDK::CBaseEntity* player, int entID);
    //    void resolve1(SDK::CBaseEntity * entity);
    void Byeter(SDK::CBaseEntity * entity);
    void resolve(SDK::CBaseEntity* entity);

public:
    /// resolve types, they're "flags" so to speak since a player can have more than 1 resolve type at once
    /// if angles overlap
    static const unsigned int RESOLVE_TYPE_NUM = 8;
    static const unsigned short RESOLVE_TYPE_OVERRIDE = 0b00000001,
        RESOLVE_TYPE_NO_FAKE = 0b00000010,
        RESOLVE_TYPE_LBY = 0b00000100,
        RESOLVE_TYPE_LBY_UPDATE = 0b00001000,
        RESOLVE_TYPE_PREDICTED_LBY_UPDATE = 0b00010000,
        RESOLVE_TYPE_LAST_MOVING_LBY = 0b00100000,
        RESOLVE_TYPE_NOT_BREAKING_LBY = 0b01000000,
        RESOLVE_TYPE_BRUTEFORCE = 0b10000000,
        RESOLVE_TYPE_LAST_MOVING_LBY_DELTA = 0b100000000,
        RESOLVE_TYPE_ANTI_FREESTANDING = 0b1000000000;

public:
    /// a struct holding info the resolver needs, updated every frame for every player
    class PlayerResolveRecord
    {
    public:
        PlayerResolveRecord()
        {
            resolve_type = 0;
            shots_missed_moving_lby = 0;
            shots_missed_moving_lby_delta = 0;

            last_balance_adjust_trigger_time = 0.f;
            last_moving_lby_delta = 0.f;
            last_time_moving = 0.f;
            last_time_down_pitch = 0.f;
            next_predicted_lby_update = 0.f;

            has_fake = false;
            is_dormant = false, is_last_moving_lby_delta_valid = false;
            is_last_moving_lby_valid = false, is_fakewalking = false;
            is_balance_adjust_triggered = false, is_balance_adjust_playing = false;
            did_lby_flick = false, did_predicted_lby_flick = false;

            for (int i = 0; i < RESOLVE_TYPE_NUM; i++)
            {
                shots_hit[i] = 0;
                shots_fired[i] = 0;
            }
        }

    public:
        struct AntiFreestandingRecord
        {
            int right_damage = 0, left_damage = 0;
            float right_fraction = 0.f, left_fraction = 0.f;
        };

    public:
        SDK::CAnimationLayer anim_layers[15];
        AntiFreestandingRecord anti_freestanding_record;

        Vector resolved_angles, networked_angles;
        Vector velocity, origin;

        int shots_hit[RESOLVE_TYPE_NUM], shots_fired[RESOLVE_TYPE_NUM];
        int shots_missed_moving_lby, shots_missed_moving_lby_delta;
        unsigned short resolve_type;

        float lower_body_yaw;
        float last_moving_lby;
        float last_moving_lby_delta;
        float last_balance_adjust_trigger_time;
        float last_time_moving;
        float last_time_down_pitch;
        float next_predicted_lby_update;

        bool is_dormant;
        bool is_last_moving_lby_valid;
        bool is_fakewalking;
        bool is_last_moving_lby_delta_valid;
        bool is_balance_adjust_triggered, is_balance_adjust_playing;
        bool did_lby_flick, did_predicted_lby_flick;
        bool has_fake;
    };

    /// a snapshot holding info about the moment you shot, used to count shots missed / hit
    struct ShotSnapshot
    {
        SDK::CBaseEntity* entity; /// person we shot at
        PlayerResolveRecord resolve_record; /// their resolve record when we shot

        float time; /// time when snapshot was created
        float first_processed_time; /// time when the shot was first processed
        bool was_shot_processed;
        int hitgroup_hit;
    };

private:
    PlayerResolveRecord player_resolve_records[64];
    std::vector<ShotSnapshot> shot_snapshots;
    std::vector<Vector> last_eye_positions;

public:
    PlayerResolveRecord & GetPlayerResolveInfo(SDK::CBaseEntity* entity)
    {
        return player_resolve_records[entity->GetIndex()];
    }

    //    std::string TranslateResolveRecord(unsigned short resolve_type);
    //    CColor GetResolveColor(unsigned short resolve_type);
    int GetResolveTypeIndex(unsigned short resolve_type);
    //int GetShotsMissed(SDK::CBaseEntity* entity, unsigned short resolve_type);

    bool IsResolved(const unsigned short& resolve_type)
    {
        if (resolve_type & RESOLVE_TYPE_NO_FAKE ||
            resolve_type & RESOLVE_TYPE_LBY_UPDATE ||
            resolve_type & RESOLVE_TYPE_PREDICTED_LBY_UPDATE)
            return true;

        return false;
    }

    bool IsFakewalking(SDK::CBaseEntity* entity)
    {
        return player_resolve_records[entity->GetIndex()].is_fakewalking;
    }

    bool IsMovingOnGround(SDK::CBaseEntity* entity)
    {
        return player_resolve_records[entity->GetIndex()].velocity.Length2D() > 0.5f && entity->GetFlags() & FL_ONGROUND;
    }

    bool IsYawSideways(SDK::CBaseEntity* entity, float yaw);
    bool IsFakingYaw(SDK::CBaseEntity* entity);

    /// pushback a record onto the shot snapshot queue
    void AddShotSnapshot(SDK::CBaseEntity* entity, PlayerResolveRecord resolve_record);

    //void EventCallback(SDK::IGameEventManager game_event);

private:
    //    void ProcessSnapShots();

    void UpdateResolveRecord(SDK::CBaseEntity* entity);

    void ResolveYaw(SDK::CBaseEntity* entity);
    void bruteforce();
    void ResolvePitch(SDK::CBaseEntity* entity);

    void ResolveYawBruteforce(SDK::CBaseEntity* entity);
    float ResolveYawOverride(SDK::CBaseEntity* entity);
    bool AntiFreestanding(SDK::CBaseEntity* entity, float& yaw);

};
Без хайда т.к гавной ваняет за 1 км
 
get good, get zeus, for ever
Пользователь
Статус
Оффлайн
Регистрация
1 Июн 2018
Сообщения
557
Реакции[?]
90
Поинты[?]
37K
от этого он лучше не станет ) хоть туда скит ресольвер впили
 
Сверху Снизу