• Ищем качественного (не новичок) разработчиков Xenforo для этого форума! В идеале, чтобы ты был фулл стек программистом. Если у тебя есть что показать, то свяжись с нами по контактным данным: https://t.me/DREDD

Исходник Supremacy FSN Fix

  • Автор темы Автор темы Yeeted
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
22 Сен 2018
Сообщения
27
Реакции
7
Frame Stage Notify is not really correct by default, while this is an improvement it still can be done better/proper implementation of ragebot functionality to properly update pertick etc but this is a good start, this would go in ClientDLL.


FrameStageNotify:
Expand Collapse Copy
void Hooks::FrameStageNotify(Stage_t stage)
{
    // save stage.
    if ( stage != FRAME_START )
        g_cl.m_stage = stage;

    // save our localplayer.
    g_cl.m_local = g_csgo.m_entlist->GetClientEntity< Player* >( g_csgo.m_engine->GetLocalPlayer() );

    switch (stage)
    {
    case FRAME_RENDER_START:
    {
        // apply local player animated angles.
        g_cl.SetAngles();

        // apply local player animation fix.
        g_cl.UpdateAnimations();

        // draw our custom beams.
        g_visuals.DrawBeams();
    }
    break;

    case FRAME_NET_UPDATE_POSTDATAUPDATE_START:
    {

    }
    break;

    case FRAME_NET_UPDATE_POSTDATAUPDATE_END:
    {
        // restore non-compressed netvars.
        g_netdata.apply();

        // run smoke removal.
        g_visuals.NoSmoke();
    }
    break;

    case FRAME_NET_UPDATE_END:
    {
        const bool v9 = g_csgo.m_engine->IsPlayingDemo( );
        const bool v10 = g_csgo.m_engine->IsPaused( );

        if (!v9 && !v10)
        {
            for (CEventInfo* it{ g_csgo.m_cl->m_events }; it != nullptr; it = it->m_next) {
                if (!it->m_class_id)
                    continue;

                // set all delays to instant.
                it->m_fire_delay = 0.f;
            }

            // game events are actually fired in OnRenderStart which is WAY later after they are received
            // effective delay by lerp time, now we call them right after theyre received (all receive proxies are invoked without delay).
            g_csgo.m_engine->FireEvents();
        }

        // update all players.
        for (int i{ 1 }; i <= g_csgo.m_globals->m_max_clients; ++i)
        {
            Player* player = g_csgo.m_entlist->GetClientEntity< Player* >(i);
        
            if (!player || !player->alive( ) || player->m_bIsLocalPlayer( ) )
                continue;

            AimPlayer* data = &g_aimbot.m_players[i - 1];
            
            data->OnNetUpdate( player );
        }
    }
    break;
    }

    // call og.
    g_hooks.m_client.GetOldMethod< FrameStageNotify_t >(CHLClient::FRAMESTAGENOTIFY)(this, stage);
}
 
Yes guys lets hard code , processpacket left da chat
 
Frame Stage Notify is not really correct by default, while this is an improvement it still can be done better/proper implementation of ragebot functionality to properly update pertick etc but this is a good start, this would go in ClientDLL.


FrameStageNotify:
Expand Collapse Copy
void Hooks::FrameStageNotify(Stage_t stage)
{
    // save stage.
    if ( stage != FRAME_START )
        g_cl.m_stage = stage;

    // save our localplayer.
    g_cl.m_local = g_csgo.m_entlist->GetClientEntity< Player* >( g_csgo.m_engine->GetLocalPlayer() );

    switch (stage)
    {
    case FRAME_RENDER_START:
    {
        // apply local player animated angles.
        g_cl.SetAngles();

        // apply local player animation fix.
        g_cl.UpdateAnimations();

        // draw our custom beams.
        g_visuals.DrawBeams();
    }
    break;

    case FRAME_NET_UPDATE_POSTDATAUPDATE_START:
    {

    }
    break;

    case FRAME_NET_UPDATE_POSTDATAUPDATE_END:
    {
        // restore non-compressed netvars.
        g_netdata.apply();

        // run smoke removal.
        g_visuals.NoSmoke();
    }
    break;

    case FRAME_NET_UPDATE_END:
    {
        const bool v9 = g_csgo.m_engine->IsPlayingDemo( );
        const bool v10 = g_csgo.m_engine->IsPaused( );

        if (!v9 && !v10)
        {
            for (CEventInfo* it{ g_csgo.m_cl->m_events }; it != nullptr; it = it->m_next) {
                if (!it->m_class_id)
                    continue;

                // set all delays to instant.
                it->m_fire_delay = 0.f;
            }

            // game events are actually fired in OnRenderStart which is WAY later after they are received
            // effective delay by lerp time, now we call them right after theyre received (all receive proxies are invoked without delay).
            g_csgo.m_engine->FireEvents();
        }

        // update all players.
        for (int i{ 1 }; i <= g_csgo.m_globals->m_max_clients; ++i)
        {
            Player* player = g_csgo.m_entlist->GetClientEntity< Player* >(i);
      
            if (!player || !player->alive( ) || player->m_bIsLocalPlayer( ) )
                continue;

            AimPlayer* data = &g_aimbot.m_players[i - 1];
          
            data->OnNetUpdate( player );
        }
    }
    break;
    }

    // call og.
    g_hooks.m_client.GetOldMethod< FrameStageNotify_t >(CHLClient::FRAMESTAGENOTIFY)(this, stage);
}
wrong can u please get off this platform

note: anims go in stage FRAME_NET_UPDATE_POSTDATAUPDATE_END lol
ref:
Пожалуйста, авторизуйтесь для просмотра ссылки.

or you can hook CL_CallPostDataUpdates / C_CSPlayer::PostDataUpdate and be a normal human LOL
 
why ru calling ur anims b4 calling orig lol
 
wrong can u please get off this platform

note: anims go in stage FRAME_NET_UPDATE_POSTDATAUPDATE_END lol
ref:
Пожалуйста, авторизуйтесь для просмотра ссылки.

or you can hook CL_CallPostDataUpdates / C_CSPlayer::PostDataUpdate and be a normal human LOL
1. It's Not a Virtual Function in All Builds

  • Unlike UpdateClientSideAnimation, PostDataUpdate isn't always part of the VMT.
  • In some versions, it's a networked interface call (handled internally by the engine using a function pointer or dispatcher), making it non-trivial to hook via VMT.
  • Even if it is in the VMT, the index may differ between builds or be hard to locate without proper symbol or RTTI access.

🧱 2. Compiler Differences + Lack of Symbols

  • Many crash logs say PDB not loaded, because you're working without debug symbols.
  • That makes it hard to verify if:
    • You're hooking the correct function
    • The call convention and signature match
    • Your offset/index is even valid
  • On older builds, internal layout may vary slightly (due to updates or OS/compiler changes).

💣 3. It’s Called Internally by the Engine

  • PostDataUpdate is called by the engine's networking layer after receiving and applying netvars (RecvTable).
  • It’s invoked per-entity, not globally — so your hook must be 100% correct or you’ll crash.
  • A mistake means you’re corrupting an engine-controlled callback, not just your own code.

🧠 4. Most Hooking Attempts Misuse the Signature

  • People try to hook it with:
    cpp
    CopyEdit
    void __fastcall PostDataUpdate(void* ecx, void* edx, DataUpdateType_t type)
    But the original function might not even use __fastcall or may have an unexpected calling convention.
  • If you’re replacing it via VMT:
    • You need exact matching signature
    • And correct cast via util::force_cast<>() or similar — any mismatch = crash

🪤 5. Hook Scope Confusion (Global vs Per-Player)

  • PostDataUpdate is per-player.
  • If you assign your hook globally:
    cpp
    CopyEdit
    g_hooks.m_PostDataUpdate = vmt->add<...>();
    Then overwrite it per player, meaning only the last hooked player keeps the pointer.
  • This leads to:
    • Undefined behavior
    • Accessing a garbage function pointer
    • Calls to null (causing "unresolved external symbol")

🩹 Why People Abandon It

  • It’s brittle.
  • Hard to debug without symbols.
  • You often gain nothing over calling the same logic in FRAME_NET_UPDATE_POSTDATAUPDATE_END.

✅ Recommendation for Legacy HVH

  • Don't hook PostDataUpdate unless you're doing something that must be done before FrameStageNotify.
  • Prefer FRAME_NET_UPDATE_POSTDATAUPDATE_END in FrameStageNotify — it’s safer, cleaner, and works in all versions.
 
Назад
Сверху Снизу