Skip to content

Commit 0201b72

Browse files
committed
possible_fix(menus): Crashes
1 parent 1b77985 commit 0201b72

File tree

2 files changed

+19
-21
lines changed

2 files changed

+19
-21
lines changed

src/engine/vgui/screentext.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ void ScreenText::SetupViewForPlayer(Player* player)
6363
{
6464
m_player = player;
6565

66+
if (!pScreenEntity.IsValid()) return;
6667
if (!pScreenEntity) return;
6768
if (!player) return;
6869
if (player->IsFakeClient()) return;
@@ -78,6 +79,7 @@ void ScreenText::SetText(std::string text)
7879
{
7980
m_text = text;
8081

82+
if (!pScreenEntity.IsValid()) return;
8183
if (!pScreenEntity) return;
8284

8385
g_entSystem.AcceptInput(pScreenEntity.Get(), "SetMessage", nullptr, nullptr, m_text, 0);
@@ -91,6 +93,7 @@ void ScreenText::SetPosition(float posX, float posY)
9193

9294
if (!m_player) return;
9395
if (m_player->IsFakeClient()) return;
96+
if (!pScreenEntity.IsValid()) return;
9497
if (!pScreenEntity) return;
9598

9699
auto pawn = m_player->GetPlayerPawn();
@@ -148,6 +151,7 @@ void ScreenText::SetColor(Color color)
148151
{
149152
m_col = color;
150153

154+
if (!pScreenEntity.IsValid()) return;
151155
if (!pScreenEntity) return;
152156
schema::SetProp(pScreenEntity.Get(), "CPointWorldText", "m_Color", color);
153157
}
@@ -180,6 +184,7 @@ Player* ScreenText::GetPlayer()
180184

181185
int ScreenText::GetEntityIndex()
182186
{
187+
if (!pScreenEntity.IsValid()) return 0;
183188
if (!pScreenEntity) return 0;
184189

185190
return pScreenEntity->GetEntityIndex().Get();

src/server/menus/MenuRenderer.cpp

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -36,22 +36,12 @@ void EmitSoundFilter(int playerid, std::string sound_name, float pitch, float vo
3636
MenuRenderer::MenuRenderer(Player* player)
3737
{
3838
m_player = player;
39-
40-
CPlayerSlot slot = player->GetSlot();
41-
42-
centerMessageEvent = g_gameEventManager->CreateEvent("show_survival_respawn_status", true);
43-
centerMessageEvent->SetUint64("duration", 1);
44-
centerMessageEvent->SetInt("userid", slot.Get());
45-
46-
playerListener = g_GameData.FetchSignature<GetLegacyGameEventListener>("LegacyGameEventListener")(slot);
47-
4839
menu = nullptr;
4940
}
5041

5142
MenuRenderer::~MenuRenderer()
5243
{
5344
HideMenu();
54-
g_gameEventManager->FreeEvent(centerMessageEvent);
5545
}
5646

5747
void MenuRenderer::ShowMenu(std::string menu_id)
@@ -101,24 +91,23 @@ void MenuRenderer::HideMenu()
10191
selected = 0;
10292

10393
std::string kind = menu->GetKind();
104-
if (menu->IsTemporary()) {
105-
std::string menuID = menu->GetID();
106-
g_MenuManager.UnregisterMenu(menuID);
107-
}
108-
109-
menu = nullptr;
110-
11194
if (kind == "center") {
11295
if (centerMessageEvent) {
11396
centerMessageEvent->SetString("loc_token", "Exiting...");
114-
playerListener->FireGameEvent(centerMessageEvent);
97+
g_GameData.FetchSignature<GetLegacyGameEventListener>("LegacyGameEventListener")(m_player->GetSlot())->FireGameEvent(centerMessageEvent);
98+
g_gameEventManager->FreeEvent(centerMessageEvent);
11599
}
116100
}
117101
else if (kind == "screen") {
118102
g_VGUI.DeleteScreenText(menuTextID);
119-
120103
menuTextID = 0;
121104
}
105+
106+
if (menu->IsTemporary()) {
107+
std::string menuID = menu->GetID();
108+
g_MenuManager.UnregisterMenu(menuID);
109+
}
110+
menu = nullptr;
122111
}
123112

124113
bool MenuRenderer::HasMenuShown()
@@ -167,6 +156,9 @@ void MenuRenderer::RenderMenu() {
167156
if (!menu) return;
168157
std::string kind = menu->GetKind();
169158
if (kind == "center") {
159+
centerMessageEvent = g_gameEventManager->CreateEvent("show_survival_respawn_status", true);
160+
centerMessageEvent->SetUint64("duration", 1);
161+
centerMessageEvent->SetInt("userid", m_player->GetSlot());
170162
centerMessageEvent->SetString("loc_token", menu->GeneratedItems(m_player->GetSlot(), page).c_str());
171163
}
172164
else if (kind == "screen") {
@@ -184,9 +176,10 @@ void MenuRenderer::RenderMenuTick()
184176

185177
std::string kind = menu->GetKind();
186178
if (kind == "center") {
187-
if (!playerListener) return;
179+
auto listener = g_GameData.FetchSignature<GetLegacyGameEventListener>("LegacyGameEventListener")(m_player->GetSlot());
180+
if (!listener) return;
188181
if (!centerMessageEvent) return;
189-
playerListener->FireGameEvent(centerMessageEvent);
182+
listener->FireGameEvent(centerMessageEvent);
190183
}
191184
}
192185

0 commit comments

Comments
 (0)