Skip to content
This repository has been archived by the owner on Feb 4, 2024. It is now read-only.

check this out #591

Open
finutz opened this issue Sep 23, 2023 · 3 comments
Open

check this out #591

finutz opened this issue Sep 23, 2023 · 3 comments

Comments

@finutz
Copy link

finutz commented Sep 23, 2023

please implement this animfix in ur cheat:

#include "../Memory.h"
#include "../Interfaces.h"

#include "Animations.h"
#include "Backtrack.h"
#include "EnginePrediction.h"
#include "Resolver.h"

#include "../SDK/LocalPlayer.h"
#include "../SDK/Cvar.h"
#include "../SDK/GlobalVars.h"
#include "../SDK/Entity.h"
#include "../SDK/UserCmd.h"
#include "../SDK/ConVar.h"
#include "../SDK/MemAlloc.h"
#include "../SDK/Input.h"
#include "../SDK/Vector.h"

static std::array<Animations::Players, 65> players{};
static std::array<matrix3x4, MAXSTUDIOBONES> fakematrix{};
static std::array<matrix3x4, MAXSTUDIOBONES> fakelagmatrix{};
static std::array<matrix3x4, MAXSTUDIOBONES> realmatrix{};
static Vector localAngle{};
static bool updatingLocal{ true };
static bool updatingEntity{ false };
static bool updatingFake{ false };
static bool sendPacket{ true };
static bool gotMatrix{ false };
static bool gotMatrixFakelag{ false };
static bool gotMatrixReal{ false };
static Vector viewangles{};
static Vector correctAngle{};
static int buildTransformsIndex = -1;
static std::array<AnimationLayer, 13> staticLayers{};
static std::array<AnimationLayer, 13> layers{};
static float primaryCycle{ 0.0f };
static float moveWeight{ 0.0f };
static float footYaw{};
static std::array<float, 24> poseParameters{};
static std::array<AnimationLayer, 13> sendPacketLayers{};

void Animations::init() noexcept
{
static auto threadedBoneSetup = interfaces->cvar->findVar("cl_threaded_bone_setup");
threadedBoneSetup->setValue(1);

static auto extrapolate = interfaces->cvar->findVar("cl_extrapolate");
extrapolate->setValue(0);

}

void Animations::reset() noexcept
{
for (auto& record : players)
record.reset();
fakematrix = {};
fakelagmatrix = {};
localAngle = Vector{};
updatingLocal = true;
updatingEntity = false;
sendPacket = true;
gotMatrix = false;
gotMatrixFakelag = false;
gotMatrixReal = false;
viewangles = Vector{};
correctAngle = Vector{};
buildTransformsIndex = -1;
staticLayers = {};
layers = {};
primaryCycle = 0.0f;
moveWeight = 0.0f;
footYaw = {};
poseParameters = {};
sendPacketLayers = {};
}

// Helper function to avoid repeated calls to getAnimationLayersCount()
int GetAnimationLayersCount(const BasePlayer* player) noexcept
{
return player ? player->getAnimationLayersCount() : 0;
}

void Animations::update(UserCmd* cmd, bool& _sendPacket) noexcept
{
static float spawnTime = 0.f;

if (!localPlayer || !localPlayer->isAlive())
    return;

if (interfaces->engine->isHLTV())
    return;

if (spawnTime != localPlayer->spawnTime())
{
    spawnTime = localPlayer->spawnTime();
    for (int i = 0; i < 13; i++)
    {
        if (i == ANIMATION_LAYER_FLINCH ||
            i == ANIMATION_LAYER_FLASHED ||
            i == ANIMATION_LAYER_WHOLE_BODY ||
            i == ANIMATION_LAYER_WEAPON_ACTION ||
            i == ANIMATION_LAYER_WEAPON_ACTION_RECROUCH)
        {
            continue;
        }
        auto& l = *localPlayer->getAnimationLayer(i);
        if (!&l)
            continue;
        l.reset();
    }
}

if (!localPlayer->getAnimstate())
    return;

viewangles = cmd->viewangles;
sendPacket = _sendPacket;
localPlayer->getAnimstate()->buttons = cmd->buttons;

updatingLocal = true;

// Allow animations to be animated in the same frame
if (localPlayer->getAnimstate()->lastUpdateFrame == memory->globalVars->framecount)
    localPlayer->getAnimstate()->lastUpdateFrame -= 1;

if (localPlayer->getAnimstate()->lastUpdateTime == memory->globalVars->currenttime)
    localPlayer->getAnimstate()->lastUpdateTime += ticksToTime(1);

localPlayer->getEFlags() &= ~0x1000;
localPlayer->getAbsVelocity() = EnginePrediction::getVelocity();

localPlayer->updateState(localPlayer->getAnimstate(), viewangles);
localPlayer->updateClientSideAnimation();

std::memcpy(&layers, localPlayer->animOverlays(), sizeof(AnimationLayer) * GetAnimationLayersCount(localPlayer.get()));

if (sendPacket)
{
    std::memcpy(&sendPacketLayers, localPlayer->animOverlays(), sizeof(AnimationLayer) * GetAnimationLayersCount(localPlayer.get()));
    footYaw = localPlayer->getAnimstate()->footYaw;
    poseParameters = localPlayer->poseParameters();
    gotMatrixReal = localPlayer->setupBones(realmatrix.data(), localPlayer->getBoneCache().size, 0x7FF00, memory->globalVars->currenttime);
    const auto origin = localPlayer->getRenderOrigin();
    if (gotMatrixReal)
    {
        for (size_t i = 0; i < MAXSTUDIOBONES; i++)
        {
            if (const auto bone = localPlayer->getBone(i))
            {
                realmatrix[i].setOrigin(bone->getOrigin());
                realmatrix[i].setScale(Vector(1.0f, 1.0f, 1.0f));
                realmatrix[i].setRotation(bone->getRotation());
            }
            else if (gotMatrixReal)
            {
                realmatrix[i].setOrigin(origin);
                realmatrix[i].setScale(Vector(1.0f, 1.0f, 1.0f));
                realmatrix[i].setRotation(Quaternion(0, 0, 0, 1));
            }
        }
    }
    updatingFake = true;
}

if (!cmd->forwardmove && !cmd->sidemove)
{
    primaryCycle = localPlayer->getPoseParam(12);
    moveWeight = std::clamp(1.0f - localPlayer->getVelocity().length2D() / 260.0f, 0.0f, 1.0f);
    localAngle = viewangles;
}

if (const auto weapon = localPlayer->getActiveWeapon())
{
    if (weapon->isGrenade())
        HandleGrenadeViewmodel(cmd, weapon);
}

const auto localPlayerFakelag = localPlayer->getFakelag();
for (auto i = 1; i <= interfaces->engine->getMaxClients(); i++)
{
    const auto player = interfaces->entityList->getEntity(i);

    if (!player || !player->isPlayer() || player->isDormant() || !player->isAlive() || player->hasGunGameImmunity())
        continue;

    const auto isLocalPlayer = player == localPlayer.get();

    players[i].update(player, isLocalPlayer, sendPacket);

    if (isLocalPlayer)
    {
        if (updatingEntity && localPlayerFakelag && localPlayerFakelag > 0)
        {
            gotMatrixFakelag = player->setupBones(fakelagmatrix.data(), player->getBoneCache().size, 0x7FF00, memory->globalVars->currenttime);
            if (gotMatrixFakelag)
            {
                for (size_t j = 0; j < MAXSTUDIOBONES; j++)
                {
                    fakelagmatrix[j].setOrigin(fakelagmatrix[j].getOrigin() + player->getAbsVelocity() * memory->globalVars->intervalPerTick * localPlayerFakelag);
                    fakelagmatrix[j].setScale(Vector(1.0f, 1.0f, 1.0f));
                }
            }
        }
    }
}

if (updatingEntity)
{
    const auto backupPoses = localPlayer->getPoseParameters();

    if (updatingFake)
    {
        const auto backupAbsAngle = localPlayer->getAbsAngle();
        const auto backupAbsVelocity = localPlayer->getAbsVelocity();
        const auto backupVelocity = localPlayer->velocity();

        localPlayer->getAbsAngle() = viewangles;
        localPlayer->getVelocity() = Vector{};
        localPlayer->updateClientSideAnimation();

        localPlayer->getAbsAngle() = backupAbsAngle;
        localPlayer->getAbsVelocity() = backupAbsVelocity;
        localPlayer->getVelocity() = backupVelocity;
    }

    for (auto i = 1; i <= interfaces->engine->getMaxClients(); i++)
    {
        const auto player = interfaces->entityList->getEntity(i);

        if (!player || !player->isPlayer() || player->isDormant() || !player->isAlive() || player->hasGunGameImmunity())
            continue;

        const auto isLocalPlayer = player == localPlayer.get();

        if (isLocalPlayer)
        {
            updatingEntity = false;
            updatingFake = false;
            continue;
        }

        players[i].applyLayers(player, layers.data(), staticLayers.data());
        players[i].preThink(player);
        players[i].think(player);
        players[i].postThink(player, correctAngle, staticLayers);
    }

    localPlayer->setPoseParameters(backupPoses);

    const auto state = localPlayer->getAnimstate();
    if (state)
    {
        std::memcpy(localPlayer->animOverlays(), layers.data(), sizeof(AnimationLayer) * GetAnimationLayersCount(localPlayer.get()));
        state->animupdate(localAngle, correctAngle);
        state->eyeYaw = correctAngle.y;
        state->goalFeetYaw = correctAngle.y;
        state->goalFeetYaw = correctAngle.y;
        state->minPitch = -89.0f;
        state->maxPitch = 89.0f;
    }
}

const auto lby = localPlayer->getAnimstate()->goalFeetYaw;
localPlayer->getAnimstate()->duckAmount = 0.0f;
localPlayer->getAnimstate()->lerpLeft = 0.0f;
localPlayer->getAnimstate()->lerpUp = 0.0f;
localPlayer->getAnimstate()->lerpRight = 0.0f;

for (int i = 0; i < 13; i++)
{
    auto& layer = *localPlayer->getAnimationLayer(i);

    if (i == ANIMATION_LAYER_FLINCH ||
        i == ANIMATION_LAYER_FLASHED ||
        i == ANIMATION_LAYER_WHOLE_BODY ||
        i == ANIMATION_LAYER_WEAPON_ACTION ||
        i == ANIMATION_LAYER_WEAPON_ACTION_RECROUCH)
    {
        continue;
    }

    if (i == ANIMATION_LAYER_ADJUST && !localPlayer->getActiveWeapon())
        continue;

    if (i == ANIMATION_LAYER_JUMP_FALL || i == ANIMATION_LAYER_JUMP_WALK || i == ANIMATION_LAYER_JUMP_RUN)
    {
        if (layer.cycle > 0.1f)
            layer.cycle = std::fminf(layer.cycle, 0.1f);
        if (layer.cycle < 0.9f)
            layer.cycle = std::fmaxf(layer.cycle, 0.9f);
    }
    else if (i == ANIMATION_LAYER_ADJUST)
    {
        if (layer.cycle > 0.5f)
            layer.cycle = std::fminf(layer.cycle, 0.5f);
        if (layer.cycle < 0.4f)
            layer.cycle = std::fmaxf(layer.cycle, 0.4f);
    }

    if (i == ANIMATION_LAYER_LAND)
    {
        if (layer.cycle > 0.8f)
            layer.cycle = std::fminf(layer.cycle, 0.8f);
        if (layer.cycle < 0.7f)
            layer.cycle = std::fmaxf(layer.cycle, 0.7f);
    }

    if (i == ANIMATION_LAYER_SWIM)
    {
        if (layer.cycle > 0.7f)
            layer.cycle = std::fminf(layer.cycle, 0.7f);
    }

    if (i == ANIMATION_LAYER_JUMP)
    {
        if (layer.cycle < 0.2f)
            layer.cycle = std::fmaxf(layer.cycle, 0.2f);
    }

    if (i == ANIMATION_LAYER_FLY)
    {
        if (layer.cycle > 0.9f)
            layer.cycle = std::fminf(layer.cycle, 0.9f);
    }

    if (i == ANIMATION_LAYER_ADJUST)
    {
        if (layer.cycle > 0.7f)
            layer.cycle = std::fminf(layer.cycle, 0.7f);
        if (layer.cycle < 0.6f)
            layer.cycle = std::fmaxf(layer.cycle, 0.6f);
    }

    if (i == ANIMATION_LAYER_ATTACK2)
    {
        if (layer.weight > 0.9f)
            layer.cycle = std::fminf(layer.cycle, 0.99f);
        else
            layer.cycle = 0.0f;
    }

    if (i == ANIMATION_LAYER_IN_VEHICLE)
    {
        if (layer.weight > 0.9f)
            layer.cycle = std::fminf(layer.cycle, 0.99f);
        else
            layer.cycle = 0.0f;
    }

    if (i == ANIMATION_LAYER_SHOTFIRE)
    {
        if (layer.weight > 0.9f)
            layer.cycle = std::fminf(layer.cycle, 0.99f);
        else
            layer.cycle = 0.0f;
    }
    if (i == ANIMATION_LAYER_GRENADE_THROW)
    {
        if (layer.weight > 0.9f)
            layer.cycle = std::fminf(layer.cycle, 0.99f);
        else
            layer.cycle = 0.0f;
    }

    if (i == ANIMATION_LAYER_BOMB)
    {
        if (layer.cycle > 0.7f)
            layer.cycle = std::fminf(layer.cycle, 0.7f);
        if (layer.cycle < 0.6f)
            layer.cycle = std::fmaxf(layer.cycle, 0.6f);
    }

    if (i == ANIMATION_LAYER_PLAYER_FLY)
    {
        if (layer.cycle > 0.9f)
            layer.cycle = std::fminf(layer.cycle, 0.9f);
    }

    if (i == ANIMATION_LAYER_CROUCH)
    {
        if (layer.weight > 0.9f)
            layer.cycle = std::fminf(layer.cycle, 0.99f);
        else
            layer.cycle = 0.0f;
    }
}

// Recharge LBY timers
localPlayer->getAnimstate()->nextLowerBodyYawUpdateTime = memory->globalVars->currenttime;
localPlayer->getAnimstate()->isTurningInPlace = false;

if (!sendPacket)
{
    // Perform server-side corrections here
    correctAngle = cmd->viewangles;
    correctAngle.y = lby;
    localPlayer->getAnimstate()->duckAmount = 0.0f;
    localPlayer->getAnimstate()->lerpLeft = 0.0f;
    localPlayer->getAnimstate()->lerpUp = 0.0f;
    localPlayer->getAnimstate()->lerpRight = 0.0f;

    if (localPlayerFakelag)
    {
        // If fakelag is enabled, apply fakelag matrix here
        if (gotMatrixFakelag)
        {
            localPlayer->getAbsAngle() = viewangles;
            localPlayer->getAnimstate()->duckAmount = 0.0f;
            localPlayer->getAnimstate()->lerpLeft = 0.0f;
            localPlayer->getAnimstate()->lerpUp = 0.0f;
            localPlayer->getAnimstate()->lerpRight = 0.0f;
            localPlayer->getAnimstate()->lastClientSideAnimationUpdateFramecount = memory->globalVars->framecount - 1;

            std::memcpy(localPlayer->animOverlays(), sendPacketLayers.data(), sizeof(AnimationLayer) * GetAnimationLayersCount(localPlayer.get()));
            localPlayer->setPoseParameters(poseParameters);

            if (gotMatrixFakelag)
            {
                localPlayer->setupBones(fakelagmatrix.data(), localPlayer->getBoneCache().size, 0x7FF00, memory->globalVars->currenttime);
            }
        }
    }
    else
    {
        // Apply real matrix if fakelag is not enabled
        if (gotMatrixReal)
        {
            localPlayer->getAbsAngle() = viewangles;
            localPlayer->getAnimstate()->duckAmount = 0.0f;
            localPlayer->getAnimstate()->lerpLeft = 0.0f;
            localPlayer->getAnimstate()->lerpUp = 0.0f;
            localPlayer->getAnimstate()->lerpRight = 0.0f;
            localPlayer->getAnimstate()->lastClientSideAnimationUpdateFramecount = memory->globalVars->framecount - 1;

            std::memcpy(localPlayer->animOverlays(), sendPacketLayers.data(), sizeof(AnimationLayer) * GetAnimationLayersCount(localPlayer.get()));
            localPlayer->setPoseParameters(poseParameters);

            if (gotMatrixReal)
            {
                localPlayer->setupBones(realmatrix.data(), localPlayer->getBoneCache().size, 0x7FF00, memory->globalVars->currenttime);
            }
        }
    }
}
updatingEntity = false;
updatingFake = false;
updatingLocal = false;
_sendPacket = sendPacket;

}

@JannesBonk
Copy link
Contributor

please implement this animfix in ur cheat:

#include "../Memory.h"
#include "../Interfaces.h"

#include "Animations.h"
#include "Backtrack.h"
#include "EnginePrediction.h"
#include "Resolver.h"

#include "../SDK/LocalPlayer.h"
#include "../SDK/Cvar.h"
#include "../SDK/GlobalVars.h"
#include "../SDK/Entity.h"
#include "../SDK/UserCmd.h"
#include "../SDK/ConVar.h"
#include "../SDK/MemAlloc.h"
#include "../SDK/Input.h"
#include "../SDK/Vector.h"

static std::array<Animations::Players, 65> players{};
static std::array<matrix3x4, MAXSTUDIOBONES> fakematrix{};
static std::array<matrix3x4, MAXSTUDIOBONES> fakelagmatrix{};
static std::array<matrix3x4, MAXSTUDIOBONES> realmatrix{};
static Vector localAngle{};
static bool updatingLocal{ true };
static bool updatingEntity{ false };
static bool updatingFake{ false };
static bool sendPacket{ true };
static bool gotMatrix{ false };
static bool gotMatrixFakelag{ false };
static bool gotMatrixReal{ false };
static Vector viewangles{};
static Vector correctAngle{};
static int buildTransformsIndex = -1;
static std::array<AnimationLayer, 13> staticLayers{};
static std::array<AnimationLayer, 13> layers{};
static float primaryCycle{ 0.0f };
static float moveWeight{ 0.0f };
static float footYaw{};
static std::array<float, 24> poseParameters{};
static std::array<AnimationLayer, 13> sendPacketLayers{};

void Animations::init() noexcept
{
static auto threadedBoneSetup = interfaces->cvar->findVar("cl_threaded_bone_setup");
threadedBoneSetup->setValue(1);

static auto extrapolate = interfaces->cvar->findVar("cl_extrapolate");
extrapolate->setValue(0);

}

void Animations::reset() noexcept
{
for (auto& record : players)
record.reset();
fakematrix = {};
fakelagmatrix = {};
localAngle = Vector{};
updatingLocal = true;
updatingEntity = false;
sendPacket = true;
gotMatrix = false;
gotMatrixFakelag = false;
gotMatrixReal = false;
viewangles = Vector{};
correctAngle = Vector{};
buildTransformsIndex = -1;
staticLayers = {};
layers = {};
primaryCycle = 0.0f;
moveWeight = 0.0f;
footYaw = {};
poseParameters = {};
sendPacketLayers = {};
}

// Helper function to avoid repeated calls to getAnimationLayersCount()
int GetAnimationLayersCount(const BasePlayer* player) noexcept
{
return player ? player->getAnimationLayersCount() : 0;
}

void Animations::update(UserCmd* cmd, bool& _sendPacket) noexcept
{
static float spawnTime = 0.f;

if (!localPlayer || !localPlayer->isAlive())
    return;

if (interfaces->engine->isHLTV())
    return;

if (spawnTime != localPlayer->spawnTime())
{
    spawnTime = localPlayer->spawnTime();
    for (int i = 0; i < 13; i++)
    {
        if (i == ANIMATION_LAYER_FLINCH ||
            i == ANIMATION_LAYER_FLASHED ||
            i == ANIMATION_LAYER_WHOLE_BODY ||
            i == ANIMATION_LAYER_WEAPON_ACTION ||
            i == ANIMATION_LAYER_WEAPON_ACTION_RECROUCH)
        {
            continue;
        }
        auto& l = *localPlayer->getAnimationLayer(i);
        if (!&l)
            continue;
        l.reset();
    }
}

if (!localPlayer->getAnimstate())
    return;

viewangles = cmd->viewangles;
sendPacket = _sendPacket;
localPlayer->getAnimstate()->buttons = cmd->buttons;

updatingLocal = true;

// Allow animations to be animated in the same frame
if (localPlayer->getAnimstate()->lastUpdateFrame == memory->globalVars->framecount)
    localPlayer->getAnimstate()->lastUpdateFrame -= 1;

if (localPlayer->getAnimstate()->lastUpdateTime == memory->globalVars->currenttime)
    localPlayer->getAnimstate()->lastUpdateTime += ticksToTime(1);

localPlayer->getEFlags() &= ~0x1000;
localPlayer->getAbsVelocity() = EnginePrediction::getVelocity();

localPlayer->updateState(localPlayer->getAnimstate(), viewangles);
localPlayer->updateClientSideAnimation();

std::memcpy(&layers, localPlayer->animOverlays(), sizeof(AnimationLayer) * GetAnimationLayersCount(localPlayer.get()));

if (sendPacket)
{
    std::memcpy(&sendPacketLayers, localPlayer->animOverlays(), sizeof(AnimationLayer) * GetAnimationLayersCount(localPlayer.get()));
    footYaw = localPlayer->getAnimstate()->footYaw;
    poseParameters = localPlayer->poseParameters();
    gotMatrixReal = localPlayer->setupBones(realmatrix.data(), localPlayer->getBoneCache().size, 0x7FF00, memory->globalVars->currenttime);
    const auto origin = localPlayer->getRenderOrigin();
    if (gotMatrixReal)
    {
        for (size_t i = 0; i < MAXSTUDIOBONES; i++)
        {
            if (const auto bone = localPlayer->getBone(i))
            {
                realmatrix[i].setOrigin(bone->getOrigin());
                realmatrix[i].setScale(Vector(1.0f, 1.0f, 1.0f));
                realmatrix[i].setRotation(bone->getRotation());
            }
            else if (gotMatrixReal)
            {
                realmatrix[i].setOrigin(origin);
                realmatrix[i].setScale(Vector(1.0f, 1.0f, 1.0f));
                realmatrix[i].setRotation(Quaternion(0, 0, 0, 1));
            }
        }
    }
    updatingFake = true;
}

if (!cmd->forwardmove && !cmd->sidemove)
{
    primaryCycle = localPlayer->getPoseParam(12);
    moveWeight = std::clamp(1.0f - localPlayer->getVelocity().length2D() / 260.0f, 0.0f, 1.0f);
    localAngle = viewangles;
}

if (const auto weapon = localPlayer->getActiveWeapon())
{
    if (weapon->isGrenade())
        HandleGrenadeViewmodel(cmd, weapon);
}

const auto localPlayerFakelag = localPlayer->getFakelag();
for (auto i = 1; i <= interfaces->engine->getMaxClients(); i++)
{
    const auto player = interfaces->entityList->getEntity(i);

    if (!player || !player->isPlayer() || player->isDormant() || !player->isAlive() || player->hasGunGameImmunity())
        continue;

    const auto isLocalPlayer = player == localPlayer.get();

    players[i].update(player, isLocalPlayer, sendPacket);

    if (isLocalPlayer)
    {
        if (updatingEntity && localPlayerFakelag && localPlayerFakelag > 0)
        {
            gotMatrixFakelag = player->setupBones(fakelagmatrix.data(), player->getBoneCache().size, 0x7FF00, memory->globalVars->currenttime);
            if (gotMatrixFakelag)
            {
                for (size_t j = 0; j < MAXSTUDIOBONES; j++)
                {
                    fakelagmatrix[j].setOrigin(fakelagmatrix[j].getOrigin() + player->getAbsVelocity() * memory->globalVars->intervalPerTick * localPlayerFakelag);
                    fakelagmatrix[j].setScale(Vector(1.0f, 1.0f, 1.0f));
                }
            }
        }
    }
}

if (updatingEntity)
{
    const auto backupPoses = localPlayer->getPoseParameters();

    if (updatingFake)
    {
        const auto backupAbsAngle = localPlayer->getAbsAngle();
        const auto backupAbsVelocity = localPlayer->getAbsVelocity();
        const auto backupVelocity = localPlayer->velocity();

        localPlayer->getAbsAngle() = viewangles;
        localPlayer->getVelocity() = Vector{};
        localPlayer->updateClientSideAnimation();

        localPlayer->getAbsAngle() = backupAbsAngle;
        localPlayer->getAbsVelocity() = backupAbsVelocity;
        localPlayer->getVelocity() = backupVelocity;
    }

    for (auto i = 1; i <= interfaces->engine->getMaxClients(); i++)
    {
        const auto player = interfaces->entityList->getEntity(i);

        if (!player || !player->isPlayer() || player->isDormant() || !player->isAlive() || player->hasGunGameImmunity())
            continue;

        const auto isLocalPlayer = player == localPlayer.get();

        if (isLocalPlayer)
        {
            updatingEntity = false;
            updatingFake = false;
            continue;
        }

        players[i].applyLayers(player, layers.data(), staticLayers.data());
        players[i].preThink(player);
        players[i].think(player);
        players[i].postThink(player, correctAngle, staticLayers);
    }

    localPlayer->setPoseParameters(backupPoses);

    const auto state = localPlayer->getAnimstate();
    if (state)
    {
        std::memcpy(localPlayer->animOverlays(), layers.data(), sizeof(AnimationLayer) * GetAnimationLayersCount(localPlayer.get()));
        state->animupdate(localAngle, correctAngle);
        state->eyeYaw = correctAngle.y;
        state->goalFeetYaw = correctAngle.y;
        state->goalFeetYaw = correctAngle.y;
        state->minPitch = -89.0f;
        state->maxPitch = 89.0f;
    }
}

const auto lby = localPlayer->getAnimstate()->goalFeetYaw;
localPlayer->getAnimstate()->duckAmount = 0.0f;
localPlayer->getAnimstate()->lerpLeft = 0.0f;
localPlayer->getAnimstate()->lerpUp = 0.0f;
localPlayer->getAnimstate()->lerpRight = 0.0f;

for (int i = 0; i < 13; i++)
{
    auto& layer = *localPlayer->getAnimationLayer(i);

    if (i == ANIMATION_LAYER_FLINCH ||
        i == ANIMATION_LAYER_FLASHED ||
        i == ANIMATION_LAYER_WHOLE_BODY ||
        i == ANIMATION_LAYER_WEAPON_ACTION ||
        i == ANIMATION_LAYER_WEAPON_ACTION_RECROUCH)
    {
        continue;
    }

    if (i == ANIMATION_LAYER_ADJUST && !localPlayer->getActiveWeapon())
        continue;

    if (i == ANIMATION_LAYER_JUMP_FALL || i == ANIMATION_LAYER_JUMP_WALK || i == ANIMATION_LAYER_JUMP_RUN)
    {
        if (layer.cycle > 0.1f)
            layer.cycle = std::fminf(layer.cycle, 0.1f);
        if (layer.cycle < 0.9f)
            layer.cycle = std::fmaxf(layer.cycle, 0.9f);
    }
    else if (i == ANIMATION_LAYER_ADJUST)
    {
        if (layer.cycle > 0.5f)
            layer.cycle = std::fminf(layer.cycle, 0.5f);
        if (layer.cycle < 0.4f)
            layer.cycle = std::fmaxf(layer.cycle, 0.4f);
    }

    if (i == ANIMATION_LAYER_LAND)
    {
        if (layer.cycle > 0.8f)
            layer.cycle = std::fminf(layer.cycle, 0.8f);
        if (layer.cycle < 0.7f)
            layer.cycle = std::fmaxf(layer.cycle, 0.7f);
    }

    if (i == ANIMATION_LAYER_SWIM)
    {
        if (layer.cycle > 0.7f)
            layer.cycle = std::fminf(layer.cycle, 0.7f);
    }

    if (i == ANIMATION_LAYER_JUMP)
    {
        if (layer.cycle < 0.2f)
            layer.cycle = std::fmaxf(layer.cycle, 0.2f);
    }

    if (i == ANIMATION_LAYER_FLY)
    {
        if (layer.cycle > 0.9f)
            layer.cycle = std::fminf(layer.cycle, 0.9f);
    }

    if (i == ANIMATION_LAYER_ADJUST)
    {
        if (layer.cycle > 0.7f)
            layer.cycle = std::fminf(layer.cycle, 0.7f);
        if (layer.cycle < 0.6f)
            layer.cycle = std::fmaxf(layer.cycle, 0.6f);
    }

    if (i == ANIMATION_LAYER_ATTACK2)
    {
        if (layer.weight > 0.9f)
            layer.cycle = std::fminf(layer.cycle, 0.99f);
        else
            layer.cycle = 0.0f;
    }

    if (i == ANIMATION_LAYER_IN_VEHICLE)
    {
        if (layer.weight > 0.9f)
            layer.cycle = std::fminf(layer.cycle, 0.99f);
        else
            layer.cycle = 0.0f;
    }

    if (i == ANIMATION_LAYER_SHOTFIRE)
    {
        if (layer.weight > 0.9f)
            layer.cycle = std::fminf(layer.cycle, 0.99f);
        else
            layer.cycle = 0.0f;
    }
    if (i == ANIMATION_LAYER_GRENADE_THROW)
    {
        if (layer.weight > 0.9f)
            layer.cycle = std::fminf(layer.cycle, 0.99f);
        else
            layer.cycle = 0.0f;
    }

    if (i == ANIMATION_LAYER_BOMB)
    {
        if (layer.cycle > 0.7f)
            layer.cycle = std::fminf(layer.cycle, 0.7f);
        if (layer.cycle < 0.6f)
            layer.cycle = std::fmaxf(layer.cycle, 0.6f);
    }

    if (i == ANIMATION_LAYER_PLAYER_FLY)
    {
        if (layer.cycle > 0.9f)
            layer.cycle = std::fminf(layer.cycle, 0.9f);
    }

    if (i == ANIMATION_LAYER_CROUCH)
    {
        if (layer.weight > 0.9f)
            layer.cycle = std::fminf(layer.cycle, 0.99f);
        else
            layer.cycle = 0.0f;
    }
}

// Recharge LBY timers
localPlayer->getAnimstate()->nextLowerBodyYawUpdateTime = memory->globalVars->currenttime;
localPlayer->getAnimstate()->isTurningInPlace = false;

if (!sendPacket)
{
    // Perform server-side corrections here
    correctAngle = cmd->viewangles;
    correctAngle.y = lby;
    localPlayer->getAnimstate()->duckAmount = 0.0f;
    localPlayer->getAnimstate()->lerpLeft = 0.0f;
    localPlayer->getAnimstate()->lerpUp = 0.0f;
    localPlayer->getAnimstate()->lerpRight = 0.0f;

    if (localPlayerFakelag)
    {
        // If fakelag is enabled, apply fakelag matrix here
        if (gotMatrixFakelag)
        {
            localPlayer->getAbsAngle() = viewangles;
            localPlayer->getAnimstate()->duckAmount = 0.0f;
            localPlayer->getAnimstate()->lerpLeft = 0.0f;
            localPlayer->getAnimstate()->lerpUp = 0.0f;
            localPlayer->getAnimstate()->lerpRight = 0.0f;
            localPlayer->getAnimstate()->lastClientSideAnimationUpdateFramecount = memory->globalVars->framecount - 1;

            std::memcpy(localPlayer->animOverlays(), sendPacketLayers.data(), sizeof(AnimationLayer) * GetAnimationLayersCount(localPlayer.get()));
            localPlayer->setPoseParameters(poseParameters);

            if (gotMatrixFakelag)
            {
                localPlayer->setupBones(fakelagmatrix.data(), localPlayer->getBoneCache().size, 0x7FF00, memory->globalVars->currenttime);
            }
        }
    }
    else
    {
        // Apply real matrix if fakelag is not enabled
        if (gotMatrixReal)
        {
            localPlayer->getAbsAngle() = viewangles;
            localPlayer->getAnimstate()->duckAmount = 0.0f;
            localPlayer->getAnimstate()->lerpLeft = 0.0f;
            localPlayer->getAnimstate()->lerpUp = 0.0f;
            localPlayer->getAnimstate()->lerpRight = 0.0f;
            localPlayer->getAnimstate()->lastClientSideAnimationUpdateFramecount = memory->globalVars->framecount - 1;

            std::memcpy(localPlayer->animOverlays(), sendPacketLayers.data(), sizeof(AnimationLayer) * GetAnimationLayersCount(localPlayer.get()));
            localPlayer->setPoseParameters(poseParameters);

            if (gotMatrixReal)
            {
                localPlayer->setupBones(realmatrix.data(), localPlayer->getBoneCache().size, 0x7FF00, memory->globalVars->currenttime);
            }
        }
    }
}
updatingEntity = false;
updatingFake = false;
updatingLocal = false;
_sendPacket = sendPacket;

}

bro hasnt heard of prs

@finutz
Copy link
Author

finutz commented Sep 23, 2023

What is that ??

@JannesBonk
Copy link
Contributor

What is that ??

pull requests

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants