11#include " usermessages.h"
2- #include < map >
2+ #include " ../sdk/entity/CRecipientFilters.h "
33
4- bool UserMessages_SendNetMessage (INetChannel* pNetChan, CNetMessage* pData, NetChannelBufType_t bufType)
4+ SH_DECL_HOOK6_void (IGameEventSystem, PostEventAbstract, SH_NOATTRIB, 0 , CSplitScreenSlot, bool , IRecipientFilter*, INetworkMessageInternal*, const CNetMessage*, unsigned long )
5+
6+ void UserMessages::Initialize()
7+ {
8+ SH_ADD_HOOK_MEMFUNC (IGameEventSystem, PostEventAbstract, g_pGameEventSystem, this , &UserMessages::PostEvent, false );
9+ }
10+
11+ void UserMessages::Destroy ()
12+ {
13+ SH_REMOVE_HOOK_MEMFUNC (IGameEventSystem, PostEventAbstract, g_pGameEventSystem, this , &UserMessages::PostEvent, false );
14+ }
15+
16+ void UserMessages::PostEvent (CSplitScreenSlot nSlot, bool bLocalOnly, IRecipientFilter* filter, INetworkMessageInternal* pEvent, const CNetMessage* pData, unsigned long nSize)
517{
6- auto netmsg = pData->GetNetMessage ();
7- int playerid = FindClientByNetChannel (pNetChan);
18+ CRecipientFilter* flt = (CRecipientFilter*)filter;
19+ std::vector<CPlayerSlot> players;
20+ for (int i = 0 ; i < flt->GetRecipientCount (); i++)
21+ players.push_back (flt->GetRecipientIndex (i));
822
923 PluginEvent* event = new PluginEvent (" core" , nullptr , nullptr );
10- auto result = g_pluginManager->ExecuteEvent (" core" , " OnUserMessageSend" , encoders::msgpack::SerializeToString ({ playerid, string_format (" %p" , netmsg), bufType == BUF_RELIABLE }), event);
11- delete event;
1224
13- return (result != EventResult::Stop);
25+ for (auto player : players)
26+ {
27+ auto result = g_pluginManager->ExecuteEvent (" core" , " OnUserMessageSend" , encoders::msgpack::SerializeToString ({ player.Get (), string_format (" %p" , pEvent), filter->GetNetworkBufType () == BUF_RELIABLE }), event);
28+ if (result == EventResult::Stop)
29+ flt->RemoveRecipient (player);
30+ }
31+
32+ delete event;
1433}
0 commit comments