33#include < plugins/manager.h>
44#include < sdk/schema.h>
55#include < sdk/components/CTakeDamageInfo.h>
6+ #include < network/usermessages/usermessage.h>
7+ #include < embedder/src/Embedder.h>
68
79#include " ehandle.h"
10+ #include " cs_usercmd.pb.h"
811
912dyno::ReturnAction CCSPlayerPawnBase_PostThinkPre (dyno::CallbackType type, dyno::IHook& hook)
1013{
@@ -143,4 +146,44 @@ dyno::ReturnAction Hook_CBaseEntity_TakeDamage(dyno::CallbackType type, dyno::IH
143146 return dyno::ReturnAction::Ignored;
144147}
145148
146- FunctionHook CBaseEntity_TakeDamage (" CBaseEntity_TakeDamage" , dyno::CallbackType::Pre, Hook_CBaseEntity_TakeDamage, " pp" , ' v' );
149+ FunctionHook CBaseEntity_TakeDamage (" CBaseEntity_TakeDamage" , dyno::CallbackType::Pre, Hook_CBaseEntity_TakeDamage, " pp" , ' v' );
150+
151+ class CUserCmd
152+ {
153+ public:
154+ [[maybe_unused]] char pad0[0x10 ];
155+ CSGOUserCmdPB cmd;
156+ [[maybe_unused]] char pad1[0x38 ];
157+ #ifdef _WIN32
158+ [[maybe_unused]] char pad2[0x8 ];
159+ #endif
160+ };
161+
162+ dyno::ReturnAction Hook_CCSPlayerController_ProcessUsercmds (dyno::CallbackType type, dyno::IHook& hook)
163+ {
164+ CEntityInstance* controller = (CEntityInstance*)(hook.getArgument <void *>(0 ));
165+ CUserCmd* cmdList = hook.getArgument <CUserCmd*>(1 );
166+ int numcmds = hook.getArgument <int >(2 );
167+ bool paused = hook.getArgument <bool >(3 );
168+ float margin = hook.getArgument <float >(4 );
169+
170+ std::vector<UserMessage*> ums;
171+ std::vector<std::any> userMessages;
172+
173+ for (int i = 0 ; i < numcmds; i++) {
174+ auto um = new UserMessage ((google::protobuf::Message*)(&cmdList[i].cmd ));
175+ ums.push_back (um);
176+ userMessages.push_back (new ClassData ({ { " um_ptr" , um } }, " UserMessage" , nullptr ));
177+ }
178+
179+ g_pluginManager.ExecuteEvent (" core" , " OnClientProcessUsercmds" , { controller->m_pEntity ->m_EHandle .GetEntryIndex () - 1 , userMessages, numcmds, paused, margin }, {});
180+
181+ for (int i = 0 ; i < numcmds; i++) {
182+ delete ums[i];
183+ delete std::any_cast<ClassData*>(userMessages[i]);
184+ }
185+
186+ return dyno::ReturnAction::Ignored;
187+ }
188+
189+ FunctionHook CCSPlayerController_ProcessUsercmds (" CCSPlayerController_ProcessUsercmds" , dyno::CallbackType::Pre, Hook_CCSPlayerController_ProcessUsercmds, " ppibf" , ' p' );
0 commit comments