notgoodusename / OsirisAndExtra

Other
129 stars 63 forks source link

check this out #591

Open finutz opened 1 year ago

finutz commented 1 year ago

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 commented 1 year ago

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 commented 1 year ago

What is that ??

JannesBonk commented 1 year ago

What is that ??

pull requests