@@ -43,8 +43,8 @@ sdk::C_CS_PlayerResource** g_player_resource;
4343// vmt_smart_hook* g_client_hook;
4444// vmt_smart_hook* g_game_event_manager_hook;
4545
46- // recv_prop_hook* g_modelindex_hook;
47- // recv_prop_hook* g_weapon_hook;
46+ recv_prop_hook* g_modelindex_hook;
47+ recv_prop_hook* g_weapon_hook;
4848recv_prop_hook* g_sequence_hook;
4949
5050auto ensure_dynamic_hooks () -> void
@@ -81,10 +81,9 @@ void On_FRAME_NET_UPDATE_POSTDATAUPDATE_START(sdk::C_BasePlayer* local);
8181
8282hooks::IBaseClientDLL_FrameStageNotify::Fn* hooks::IBaseClientDLL_FrameStageNotify::m_original;
8383
84- void MapSequence (sdk::C_BaseViewModel*view_model);
85- void UnmapSequence (sdk::C_BaseViewModel* view_model);
84+ void MapViewModel (sdk::C_BaseViewModel* view_model);
85+ void UnmapViewModel (sdk::C_BaseViewModel* view_model);
8686void patch_weapon (sdk::C_BaseAttributableItem* weapon);
87- void patch_view_model (sdk::C_BaseViewModel* view_model);
8887
8988auto __fastcall hooks::IBaseClientDLL_FrameStageNotify::hooked (sdk::IBaseClientDLL* thisptr, void *, sdk::ClientFrameStage_t curStage) -> void
9089{
@@ -119,6 +118,42 @@ auto __fastcall hooks::IBaseClientDLL_FrameStageNotify::hooked(sdk::IBaseClientD
119118 }
120119 }
121120 }
121+ } break ;
122+ case sdk::FRAME_NET_UPDATE_END:
123+ {
124+ for (int idx = 0 ; idx <= g_entity_list->GetMaxEntities (); ++idx)
125+ {
126+ if (auto ent = g_entity_list->GetClientEntity (idx))
127+ {
128+ if (auto bent = ent->GetBaseEntity ())
129+ {
130+ const char * className = bent->GetClassname ();
131+
132+ if (0 == strcmp (" predicted_viewmodel" , className))
133+ {
134+ auto view_model = static_cast <sdk::C_BaseViewModel*>(bent);
135+ MapViewModel (view_model);
136+ }
137+ }
138+ }
139+ }
140+ m_original (thisptr, nullptr , curStage);
141+ } break ;
142+ case sdk::FRAME_NET_UPDATE_START:
143+ {
144+ for (int idx = 0 ; idx <= g_entity_list->GetMaxEntities (); ++idx)
145+ {
146+ if (auto ent = g_entity_list->GetClientEntity (idx))
147+ {
148+ if (auto bent = ent->GetBaseEntity ())
149+ {
150+ if (0 == strcmp (" predicted_viewmodel" , bent->GetClassname ()))
151+ {
152+ UnmapViewModel (static_cast <sdk::C_BaseViewModel*>(bent));
153+ }
154+ }
155+ }
156+ }
122157 m_original (thisptr, nullptr , curStage);
123158 } break ;
124159 default :
@@ -127,15 +162,6 @@ auto __fastcall hooks::IBaseClientDLL_FrameStageNotify::hooked(sdk::IBaseClientD
127162
128163}
129164
130-
131- void __cdecl hooks::sequence_proxy_fn (const sdk::CRecvProxyData* proxy_data_const, void * entity, void * output) {
132- auto view_model = static_cast <sdk::C_BaseViewModel*>(entity);
133- patch_view_model (view_model);
134- UnmapSequence (view_model);
135- g_sequence_hook->get_original_function ()(proxy_data_const, entity, output);
136- MapSequence (view_model);
137- }
138-
139165auto initialize (void * instance) -> void
140166{
141167 g_client = get_interface<sdk::IBaseClientDLL>(get_client_name (), CLIENT_DLL_INTERFACE_VERSION);
@@ -169,8 +195,8 @@ auto initialize(void* instance) -> void
169195 // const auto weapon_prop = sdk::C_BaseViewModel::GetWeaponProp();
170196 // g_weapon_hook = new recv_prop_hook(weapon_prop, &hooks::weapon_proxy_fn);
171197
172- const auto squence_prop = sdk::C_BaseViewModel::GetSequenceProp ();
173- g_sequence_hook = new recv_prop_hook (squence_prop, &hooks::sequence_proxy_fn);
198+ // const auto squence_prop = sdk::C_BaseViewModel::GetSequenceProp();
199+ // g_sequence_hook = new recv_prop_hook(squence_prop, &hooks::sequence_proxy_fn);
174200
175201 const auto team_arr_prop = sdk::C_CS_PlayerResource::GetTeamProp ();
176202 const auto team_prop = team_arr_prop->m_pDataTable ->m_pProps ;
0 commit comments