Skip to content

Commit acaf882

Browse files
committed
chore(um): async -> sync
1 parent 406696b commit acaf882

File tree

5 files changed

+65
-10
lines changed

5 files changed

+65
-10
lines changed

src/addons/addons.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,6 @@ bool Addons::SendNetMessage(CNetMessage* pData, NetChannelBufType_t bufType)
131131
{
132132
CServerSideClient* pClient = META_IFACEPTR(CServerSideClient);
133133
NetMessageInfo_t* info = pData->GetNetMessage()->GetNetMessageInfo();
134-
if (!UserMessages_SendNetMessage(pClient->GetNetChannel(), pData, bufType))
135-
RETURN_META_VALUE(MRES_SUPERCEDE, false);
136134

137135
if (info->m_MessageId != 7 || g_addons.GetStatus() == false || g_addons.GetAddons().size() == 0)
138136
RETURN_META_VALUE(MRES_IGNORED, true);

src/entrypoint.cpp

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ Patches* g_Patches = nullptr;
113113
CallStack* g_callStack = nullptr;
114114
EventManager* eventManager = nullptr;
115115
HTTPManager* g_httpManager = nullptr;
116+
UserMessages* g_userMessages = nullptr;
116117
VoiceManager g_voiceManager;
117118

118119
//////////////////////////////////////////////////////////////
@@ -173,6 +174,7 @@ bool Swiftly::Load(PluginId id, ISmmAPI* ismm, char* error, size_t maxlen, bool
173174
g_ResourceMonitor = new ResourceMonitor();
174175
g_callStack = new CallStack();
175176
eventManager = new EventManager();
177+
g_userMessages = new UserMessages();
176178

177179
if (g_Config->LoadConfiguration())
178180
PRINT("The configurations has been succesfully loaded.\n");
@@ -191,6 +193,7 @@ bool Swiftly::Load(PluginId id, ISmmAPI* ismm, char* error, size_t maxlen, bool
191193

192194
g_addons.LoadAddons();
193195
g_addons.Initialize();
196+
g_userMessages->Initialize();
194197
eventManager->Initialize();
195198

196199
if (!InitializeHooks())
@@ -266,6 +269,7 @@ bool Swiftly::Unload(char* error, size_t maxlen)
266269
{
267270
g_addons.Destroy();
268271
g_voiceManager.OnShutdown();
272+
g_userMessages->Destroy();
269273

270274
g_pluginManager->StopPlugins();
271275
g_pluginManager->UnloadPlugins();
@@ -285,6 +289,25 @@ bool Swiftly::Unload(char* error, size_t maxlen)
285289

286290
g_pGameEntitySystem->RemoveListenerEntity(&g_entityListener);
287291

292+
delete g_commandsManager;
293+
delete g_Config;
294+
delete g_conFilter;
295+
delete g_translations;
296+
delete g_Logger;
297+
delete g_playerManager;
298+
delete g_pluginManager;
299+
delete g_Offsets;
300+
delete g_Signatures;
301+
delete g_precacher;
302+
delete g_dbManager;
303+
delete g_MenuManager;
304+
delete g_ResourceMonitor;
305+
delete g_Patches;
306+
delete g_callStack;
307+
delete eventManager;
308+
delete g_httpManager;
309+
delete g_userMessages;
310+
288311
ConVar_Unregister();
289312
return true;
290313
}

src/sdk/entity/CRecipientFilters.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,14 @@ class CRecipientFilter : public IRecipientFilter
6262
}
6363
}
6464

65+
void RemoveRecipient(CPlayerSlot slot)
66+
{
67+
if (m_Recipients.Find(slot) == m_Recipients.InvalidIndex())
68+
return;
69+
70+
m_Recipients.FindAndRemove(slot);
71+
}
72+
6573
private:
6674
// Can't copy this unless we explicitly do it!
6775
CRecipientFilter(CRecipientFilter const& source)

src/usermessages/usermessages.cpp

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,33 @@
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
}

src/usermessages/usermessages.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,13 @@
44
#include "../plugins/core/scripting.h"
55

66
int FindClientByNetChannel(INetChannel* pNetChan);
7-
bool UserMessages_SendNetMessage(INetChannel* pNetChan, CNetMessage* pData, NetChannelBufType_t bufType);
7+
8+
class UserMessages {
9+
public:
10+
void Initialize();
11+
void Destroy();
12+
13+
void PostEvent(CSplitScreenSlot nSlot, bool bLocalOnly, IRecipientFilter* filter, INetworkMessageInternal* pEvent, const CNetMessage* pData, unsigned long nSize);
14+
};
815

916
#endif

0 commit comments

Comments
 (0)