Skip to content

Commit bf2e63f

Browse files
committed
fix(menus): Center Menu crashing on exit
1 parent c048317 commit bf2e63f

File tree

3 files changed

+8
-4
lines changed

3 files changed

+8
-4
lines changed

src/network/usermessages/usermessages.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,19 @@ void UserMessages::Initialize()
1919
{
2020
SH_ADD_HOOK_MEMFUNC(IGameEventSystem, PostEventAbstract, g_pGameEventSystem, this, &UserMessages::PostEvent, false);
2121

22+
#ifndef _WIN32
2223
DynLibUtils::CModule eng = DetermineModuleByLibrary("engine2");
2324
void* serverSideClientVTable = FindVirtTable(&eng, "CServerSideClient", g_GameData.GetOffset("INetworkMessageProcessingPreFilter"));
2425

2526
hookID = SH_ADD_MANUALDVPHOOK(FilterMessage, serverSideClientVTable, SH_MEMBER(this, &UserMessages::FilterMessage), false);
27+
#endif
2628
}
2729

2830
bool UserMessages::FilterMessage(const CNetMessage* cMsg, INetChannel* netchan)
2931
{
3032
auto client = META_IFACEPTR(CServerSideClient);
3133
if (!client) RETURN_META_VALUE(MRES_IGNORED, true);
34+
if (!cMsg) RETURN_META_VALUE(MRES_IGNORED, true);
3235

3336
UserMessage um(cMsg->GetNetMessage(), const_cast<CNetMessage*>(cMsg), (uint64_t*)0);
3437
ClassData* umobj = new ClassData({ { "um_ptr", &um } }, "UserMessage", nullptr);
@@ -43,9 +46,11 @@ bool UserMessages::FilterMessage(const CNetMessage* cMsg, INetChannel* netchan)
4346
void UserMessages::Destroy()
4447
{
4548
SH_REMOVE_HOOK_MEMFUNC(IGameEventSystem, PostEventAbstract, g_pGameEventSystem, this, &UserMessages::PostEvent, false);
46-
49+
50+
#ifndef _WIN32
4751
SH_REMOVE_HOOK_ID(hookID);
4852
hookID = -1;
53+
#endif
4954
}
5055

5156
void UserMessages::PostEvent(CSplitScreenSlot nSlot, bool bLocalOnly, int nClientCount, const uint64* clients, INetworkMessageInternal* pEvent, const CNetMessage* pData, unsigned long nSize, NetChannelBufType_t bufType)

src/scripting/server/menus.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ LoadScriptingComponent(menus, [](PluginObject plugin, EContext* ctx) -> void {
3131
std::string title = context->GetArgumentOr<std::string>(1, "");
3232
std::string color = context->GetArgumentOr<std::string>(2, "");
3333
std::vector<std::pair<std::string, std::string>> options = context->GetArgumentOr<std::vector<std::pair<std::string, std::string>>>(3, std::vector<std::pair<std::string, std::string>>{});
34-
std::string menuKind = context->GetArgumentOr<std::string>(4, g_Config.FetchValue<std::string>("core.menu.kind"));
34+
std::string menuKind = WIN_LINUX("center", context->GetArgumentOr<std::string>(4, g_Config.FetchValue<std::string>("core.menu.kind")));
3535

3636
g_MenuManager.RegisterMenu(FetchPluginName(context->GetPluginContext()), menuid, title, color, options, true, menuKind);
3737
});

src/server/menus/MenuRenderer.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,8 @@ void MenuRenderer::HideMenu()
9393
std::string kind = menu->GetKind();
9494
if (kind == "center") {
9595
if (centerMessageEvent) {
96-
centerMessageEvent->SetString("loc_token", "Exiting...");
97-
g_GameData.FetchSignature<GetLegacyGameEventListener>("LegacyGameEventListener")(m_player->GetSlot())->FireGameEvent(centerMessageEvent);
9896
g_gameEventManager->FreeEvent(centerMessageEvent);
97+
centerMessageEvent = nullptr;
9998
}
10099
}
101100
else if (kind == "screen") {

0 commit comments

Comments
 (0)