@@ -563,10 +563,18 @@ static auto do_sequence_remapping(sdk::C_BaseViewModel* entity, int nSequence) -
563563
564564static std::map<void *,vmt_multi_hook *> C_BaseViewModel_SetSequence_hooks;
565565
566+ void * g_setsequence_called = nullptr ;
567+ sdk::C_BaseViewModel* g_setsequence_This = nullptr ;
568+ int g_setsequence_value = 0 ;
569+
566570auto __fastcall hooks::C_BaseViewModel_SetSequence::hooked (sdk::C_BaseViewModel* This, void * Edx, int nSequence) -> void
567571{
568572 auto &pHook = C_BaseViewModel_SetSequence_hooks[*(void **)This];
569- pHook->get_original_function <void (__fastcall *)(sdk::C_BaseViewModel*, void *, int )>(219 )(This, Edx, do_sequence_remapping (This, nSequence));
573+ g_setsequence_value = nSequence;
574+ g_setsequence_This = This;
575+ g_setsequence_called = pHook->get_original_function <void (__fastcall*)(sdk::C_BaseViewModel*, void *, int )>(219 );
576+ int newSequence = do_sequence_remapping (This, nSequence);
577+ ((void (__fastcall *)(sdk::C_BaseViewModel*, void *, int ))g_setsequence_called)(This, Edx, newSequence);
570578}
571579
572580void hook_C_BaseViewModel_SetSequence (sdk::C_BaseViewModel* thisptr) {
@@ -588,9 +596,6 @@ int g_modelindex_value = 0;
588596
589597auto __cdecl hooks::modelindex_proxy_fn (const sdk::CRecvProxyData* proxy_data_const, void * entity, void * output) -> void
590598{
591- // The problem is that model index is set before we know the weapon handle, so we cache it off and fix it up after weapon handle is set,
592- // assuming that weapon handle changes when model index changes.
593-
594599 g_modelindex_called = true ;
595600 g_modelindex_value = proxy_data_const->m_Value .m_Int ;
596601}
@@ -619,4 +624,10 @@ auto __cdecl hooks::weapon_proxy_fn(const sdk::CRecvProxyData* proxy_data_const,
619624 // Fake in model index call as good as we can (good enough I guess):
620625 g_modelindex_hook->get_original_function ()(&data, view_model, &(view_model->GetModelIndex ()));
621626 }
627+
628+ if (g_setsequence_called && g_setsequence_This == view_model) {
629+ int newSequence = do_sequence_remapping (view_model, g_setsequence_value);
630+ ((void (__fastcall*)(sdk::C_BaseViewModel*, void *, int ))g_setsequence_called)(g_setsequence_This, 0 , newSequence);
631+ }
632+ g_setsequence_called = nullptr ;
622633}
0 commit comments