Open finutz opened 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
What is that ??
What is that ??
pull requests
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);
}
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;
}