@@ -159,11 +159,24 @@ void InitHooks(CBaseEntity* pEntity)
159159// ---------------------------------------------------------------------------------
160160bool PrePlayerRunCommand (HookType_t hook_type, CHook* pHook)
161161{
162- GET_LISTENER_MANAGER (OnPlayerRunCommand, run_command_manager);
163- GET_LISTENER_MANAGER (OnButtonStateChanged, button_state_manager);
162+ bool bUsePreRegister;
164163
165- if (!run_command_manager->GetCount () && !button_state_manager->GetCount ())
166- return false ;
164+ if (hook_type == HOOKTYPE_PRE) {
165+ GET_LISTENER_MANAGER (OnPlayerRunCommand, run_command_manager);
166+ GET_LISTENER_MANAGER (OnButtonStateChanged, button_state_manager);
167+
168+ if (!run_command_manager->GetCount () && !button_state_manager->GetCount ())
169+ return false ;
170+ }
171+ else {
172+ bUsePreRegister = pHook->m_bUsePreRegisters ;
173+ pHook->m_bUsePreRegisters = true ;
174+
175+ GET_LISTENER_MANAGER (OnPlayerPostRunCommand, post_run_command_manager);
176+
177+ if (!post_run_command_manager->GetCount ())
178+ return false ;
179+ }
167180
168181 static object Player = import (" players.entity" ).attr (" Player" );
169182
@@ -181,24 +194,35 @@ bool PrePlayerRunCommand(HookType_t hook_type, CHook* pHook)
181194#endif
182195
183196 object player = Player (index);
184- CALL_LISTENERS (OnPlayerRunCommand, player, ptr (pCmd));
185197
186- if (button_state_manager->GetCount ())
187- {
188- CBaseEntityWrapper* pWrapper = (CBaseEntityWrapper*) pEntity;
189- static int offset = pWrapper->FindDatamapPropertyOffset (" m_nButtons" );
198+ if (hook_type == HOOKTYPE_PRE) {
199+ CALL_LISTENERS (OnPlayerRunCommand, player, ptr (pCmd));
190200
191- int buttons = pWrapper-> GetDatamapPropertyByOffset < int >(offset );
192- if (buttons != pCmd-> buttons )
201+ GET_LISTENER_MANAGER (OnButtonStateChanged, button_state_manager );
202+ if (button_state_manager-> GetCount () )
193203 {
194- CALL_LISTENERS (OnButtonStateChanged, player, buttons, pCmd->buttons );
204+ CBaseEntityWrapper* pWrapper = (CBaseEntityWrapper*) pEntity;
205+ static int offset = pWrapper->FindDatamapPropertyOffset (" m_nButtons" );
206+
207+ int buttons = pWrapper->GetDatamapPropertyByOffset <int >(offset);
208+ if (buttons != pCmd->buttons )
209+ {
210+ CALL_LISTENERS (OnButtonStateChanged, player, buttons, pCmd->buttons );
211+ }
195212 }
196213 }
197-
214+ else {
215+ CALL_LISTENERS (OnPlayerPostRunCommand, player, ptr (pCmd));
216+ }
217+
198218#if defined(ENGINE_BRANCH_TF2)
199219 CUserCmd* pRealCmd = pHook->GetArgument <CUserCmd*>(1 );
200220 memcpy (pRealCmd, pCmd, sizeof (CUserCmd));
201221#endif
202222
223+ if (hook_type == HOOKTYPE_POST) {
224+ pHook->m_bUsePreRegisters = bUsePreRegister;
225+ }
226+
203227 return false ;
204228}
0 commit comments