- Статус
- Оффлайн
- Регистрация
- 6 Фев 2020
- Сообщения
- 490
- Реакции
- 87
Всем привет!
Недавно спастил анимфикс с LWK но столкнулся с одним приколом)
Если fps_max 0 то модельку начинает фликать.
Если fps_max 60 то происходит это (все время смотрит в лево)
Дебажил дебажил так никчему и не пришел, прописал все что нужно было в create_move и fsn.
Недавно спастил анимфикс с LWK но столкнулся с одним приколом)
Если fps_max 0 то модельку начинает фликать.
Если fps_max 60 то происходит это (все время смотрит в лево)


Дебажил дебажил так никчему и не пришел, прописал все что нужно было в create_move и fsn.
C++:
void local_animations::run(EClientFrameStage stage)
{
if (I::ClientState->m_nDeltaTick == -1) return;
if (IPT::IsKeyDown(C::Get<int>(Vars.iFakeDuck)))
{
if (stage == FRAME_NET_UPDATE_END)
{
fake_server_update = false;
if (G::pLocal->GetSimulationTime() != fake_simulation_time) //-V550 //-V807
{
fake_server_update = true;
fake_simulation_time = G::pLocal->GetSimulationTime();
}
G::pLocal->get_animlayers()[3].flWeight = 0.0f;
G::pLocal->get_animlayers()[3].flCycle = 0.0f;
G::pLocal->get_animlayers()[12].flWeight = 0.0f;
update_fake_animations();
}
else if (stage == FRAME_RENDER_START)
{
auto animstate = G::pLocal->GetAnimationState(); //-V807
if (!animstate)
return;
real_server_update = false;
if (G::pLocal->GetSimulationTime() != real_simulation_time) //-V550
{
real_server_update = true;
real_simulation_time = G::pLocal->GetSimulationTime();
}
G::pLocal->get_animlayers()[3].flWeight = 0.0f;
G::pLocal->get_animlayers()[3].flCycle = 0.0f;
G::pLocal->get_animlayers()[12].flWeight = 0.0f;
update_local_animations(animstate);
}
}
else if (stage == FRAME_RENDER_START)
{
auto animstate = G::pLocal->GetAnimationState(); //-V807
if (!animstate)
return;
real_server_update = false;
fake_server_update = false;
if (G::pLocal->GetSimulationTime() != real_simulation_time || G::pLocal->GetSimulationTime() != fake_simulation_time) //-V550
{
real_server_update = fake_server_update = true;
real_simulation_time = fake_simulation_time = G::pLocal->GetSimulationTime();
}
G::pLocal->get_animlayers()[3].flWeight = 0.0f;
G::pLocal->get_animlayers()[3].flCycle = 0.0f;
G::pLocal->get_animlayers()[12].flWeight = 0.0f;
update_fake_animations();
update_local_animations(animstate);
}
}
void local_animations::update_prediction_animations()
{
auto alloc = !local_data.prediction_animstate;
auto change = !alloc && handle != &G::pLocal->GetRefEHandle(); //-V807
auto reset = !alloc && !change && G::pLocal->GetSpawnTime() != spawntime; //-V550
if (change)
I::MemAlloc->Free(local_data.prediction_animstate);
if (reset)
{
utill::Reset(local_data.prediction_animstate);
spawntime = G::pLocal->GetSpawnTime();
}
if (alloc || change)
{
local_data.prediction_animstate = (CCSGOPlayerAnimState*)I::MemAlloc->Alloc(sizeof(CCSGOPlayerAnimState));
if (local_data.prediction_animstate)
utill::Create(local_data.prediction_animstate, G::pLocal);
handle = (CBaseHandle*)&G::pLocal->GetRefEHandle();
spawntime = G::pLocal->GetSpawnTime();
}
if (!alloc && !change && !reset)
{
float pose_parameter[24]; //-V688
memcpy(pose_parameter, &G::pLocal->GetPoseParameter(), 24 * sizeof(float));
CAnimationLayer layers[15]; //-V688
memcpy(layers, G::pLocal->get_animlayers(), G::pLocal->GetAnimationOverlaysCount() * sizeof(CAnimationLayer));
local_data.prediction_animstate->pEntity = G::pLocal;
utill::Update(local_data.prediction_animstate, ZERO);
G::pLocal->setup_bones_fixed(G::prediction_matrix, BONE_USED_BY_HITBOX);
memcpy(&G::pLocal->GetPoseParameter(), pose_parameter, 24 * sizeof(float));
memcpy(G::pLocal->get_animlayers(), layers, G::pLocal->GetAnimationOverlaysCount() * sizeof(CAnimationLayer));
}
}
void local_animations::update_fake_animations()
{
auto alloc = !local_data.animstate;
auto change = !alloc && handle != &G::pLocal->GetRefEHandle(); //-V807
auto reset = !alloc && !change && G::pLocal->GetSpawnTime() != spawntime; //-V550
if (change)
I::MemAlloc->Free(local_data.animstate);
if (reset)
{
utill::Reset(local_data.animstate);
spawntime = G::pLocal->GetSpawnTime();
}
if (alloc || change)
{
local_data.animstate = (CCSGOPlayerAnimState*)I::MemAlloc->Alloc(sizeof(CCSGOPlayerAnimState));
if (local_data.animstate)
utill::Create(local_data.animstate, G::pLocal);
handle = (CBaseHandle*)&G::pLocal->GetRefEHandle();
spawntime = G::pLocal->GetSpawnTime();
}
if (!alloc && !change && !reset && fake_server_update)
{
float pose_parameter[24]; //-V688
memcpy(pose_parameter, &G::pLocal->GetPoseParameter(), 24 * sizeof(float));
CAnimationLayer layers[15]; //-V688
memcpy(layers, G::pLocal->get_animlayers(), G::pLocal->GetAnimationOverlaysCount() * sizeof(CAnimationLayer));
auto backup_frametime = I::Globals->flFrameTime; //-V807
auto backup_curtime = I::Globals->flCurrentTime;
I::Globals->flFrameTime = I::Globals->flIntervalPerTick;
I::Globals->flCurrentTime = G::pLocal->GetSimulationTime();
local_data.animstate->pEntity = G::pLocal;
utill::Update(local_data.animstate, local_animations::Get().local_data.fake_angles);
local_data.animstate->bHitGroundAnimation = false;
local_data.animstate->flHitGroundCycle = 0.0f;
local_data.animstate->flHitGroundWeight = 1.0f;
G::pLocal->setup_bones_fixed(G::fake_matrix, BONE_USED_BY_ANYTHING);
//local_data.visualize_lag = g_cfg.player.visualize_lag;
/*
if (!local_data.visualize_lag)
{
for (auto& i : g_ctx.globals.fake_matrix)
{
i[0][3] -= G::pLocal->GetRenderOrigin().x; //-V807
i[1][3] -= G::pLocal->GetRenderOrigin().y;
i[2][3] -= G::pLocal->GetRenderOrigin().z;
}
}*/
I::Globals->flFrameTime = backup_frametime;
I::Globals->flCurrentTime = backup_curtime;
memcpy(&G::pLocal->GetPoseParameter(), pose_parameter, 24 * sizeof(float));
memcpy(G::pLocal->get_animlayers(), layers, G::pLocal->GetAnimationOverlaysCount() * sizeof(CAnimationLayer));
}
}
void local_animations::update_local_animations(CCSGOPlayerAnimState* animstate)
{
if (tickcount != I::Globals->iTickCount) //-V550
{
tickcount = I::Globals->iTickCount;
memcpy(layers, G::pLocal->get_animlayers(), G::pLocal->GetAnimationOverlaysCount() * sizeof(CAnimationLayer)); //-V807
if (local_data.animstate)
animstate->flDuckAmount = local_data.animstate->flDuckAmount;
animstate->iLastUpdateFrame = 0;
utill::Update(animstate, local_animations::Get().local_data.fake_angles);
if (real_server_update)
{
abs_angles = animstate->flGoalFeetYaw;
memcpy(pose_parameter, &G::pLocal->GetPoseParameter(), 24 * sizeof(float));
}
}
else
animstate->iLastUpdateFrame = I::Globals->iFrameCount;
animstate->flGoalFeetYaw = CAntiAim::Get().condition(G::pCmd) ? abs_angles : local_animations::Get().local_data.real_angles.y;
G::pLocal->SetAbsAngles((0.0f, abs_angles, 0.0f));
memcpy(G::pLocal->get_animlayers(), layers, G::pLocal->GetAnimationOverlaysCount() * sizeof(CAnimationLayer));
memcpy(&G::pLocal->GetPoseParameter(), pose_parameter, 24 * sizeof(float));
}