Skip to content

Commit 1621980

Browse files
committed
fix(core): Crash on player join
1 parent 44ad365 commit 1621980

File tree

11 files changed

+58
-17
lines changed

11 files changed

+58
-17
lines changed

src/convars/convars.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ class FakeConVar
2828
std::any GetValue();
2929
};
3030

31-
extern std::map<std::string, FakeConVar*> fakeConvars;
31+
bool FakeConvarExists(std::string name);
32+
FakeConVar* GetFakeConvar(std::string name);
33+
void DeleteFakeConvar(std::string name);
34+
std::map<std::string, FakeConVar*> FetchFakeConvars();
35+
void InsertFakeConvar(std::string name, FakeConVar* cvar);
3236

3337
#endif

src/convars/fake_convars.cpp

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,38 @@
22

33
static void convarsCallback(const CCommandContext& context, const CCommand& args);
44
std::map<std::string, bool> convarCreated;
5+
std::map<std::string, FakeConVar*> fakeConvars;
6+
7+
bool FakeConvarExists(std::string name)
8+
{
9+
return (fakeConvars.find(name) != fakeConvars.end());
10+
}
11+
12+
FakeConVar* GetFakeConvar(std::string name)
13+
{
14+
if (!FakeConvarExists(name)) return nullptr;
15+
16+
return fakeConvars.at(name);
17+
}
18+
19+
void DeleteFakeConvar(std::string name)
20+
{
21+
if (!FakeConvarExists(name)) return;
22+
23+
fakeConvars.erase(name);
24+
}
25+
26+
std::map<std::string, FakeConVar*> FetchFakeConvars()
27+
{
28+
return fakeConvars;
29+
}
30+
31+
void InsertFakeConvar(std::string name, FakeConVar* cvar)
32+
{
33+
if (FakeConvarExists(name)) return;
34+
35+
fakeConvars.insert({ name, cvar });
36+
}
537

638
FakeConVar::FakeConVar(std::string name, EConVarType type, std::any defaultValue, bool prot)
739
{

src/convars/shared_convars.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,8 @@ std::any FetchCVarValue(std::string cvarname)
111111
return nullptr;
112112
}
113113
}
114-
else if (fakeConvars.find(cvarname) != fakeConvars.end())
115-
return fakeConvars.at(cvarname)->GetValue();
114+
else if (FakeConvarExists(cvarname))
115+
return GetFakeConvar(cvarname)->GetValue();
116116

117117
return nullptr;
118118
}
@@ -122,6 +122,6 @@ EConVarType FetchCVarType(std::string cvarname)
122122
ConVar* cvar = FetchCVar(cvarname);
123123

124124
if (cvar) return cvar->m_eVarType;
125-
else if (fakeConvars.find(cvarname) != fakeConvars.end()) return fakeConvars.at(cvarname)->GetType();
125+
else if (FakeConvarExists(cvarname)) return GetFakeConvar(cvarname)->GetType();
126126
else return EConVarType_Invalid;
127127
}

src/core/commands.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,8 @@ void SwiftlyStatus(CPlayerSlot slot, CCommandContext context)
115115

116116
void SwiftlyConvarsManager(CPlayerSlot slot, CCommandContext context, int page)
117117
{
118+
auto fakeConvars = FetchFakeConvars();
119+
118120
PrintToClientOrConsole(slot, "Convars", "There are %d convars created by plugins.\n", fakeConvars.size());
119121
PrintToClientOrConsole(slot, "Convars", "Below will be shown a list of all the convars:\n");
120122

src/entrypoint.cpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
#include "addons/addons.h"
1313
#include "addons/clients.h"
14-
#include "convars/convars.h"
1514
#include "configuration/Configuration.h"
1615
#include "commands/CommandsManager.h"
1716
#include "crashreporter/CallStack.h"
@@ -91,8 +90,6 @@ CGameEntitySystem* GameEntitySystem()
9190

9291
CUtlVector<FuncHookBase*> g_vecHooks;
9392
std::map<std::string, PluginUserMessage> scriptingUserMessages;
94-
std::map<std::string, FakeConVar*> fakeConvars;
95-
std::map<std::string, std::string> pluginBasePaths;
9693

9794
Addons g_addons;
9895
CommandsManager* g_commandsManager = nullptr;

src/plugins/Plugin.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,4 @@ class Plugin
4949
virtual EventResult TriggerEvent(std::string invokedBy, std::string eventName, std::string eventPayload, PluginEvent* event) = 0;
5050
};
5151

52-
extern std::map<std::string, std::string> pluginBasePaths;
53-
5452
#endif

src/plugins/PluginManager.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,4 +193,10 @@ EventResult PluginManager::ExecuteEvent(std::string invokedBy, std::string event
193193
std::vector<Plugin*> PluginManager::GetPluginsList()
194194
{
195195
return this->pluginsList;
196+
}
197+
198+
std::string PluginManager::GetPluginBasePath(std::string plugin_name)
199+
{
200+
if (this->pluginBasePaths.find(plugin_name) == this->pluginBasePaths.end()) return "addons/swiftly/plugins";
201+
return this->pluginBasePaths[plugin_name];
196202
}

src/plugins/PluginManager.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,14 @@ class PluginManager
1717
private:
1818
std::vector<Plugin*> pluginsList;
1919
std::map<std::string, Plugin*> pluginsMap;
20+
std::map<std::string, std::string> pluginBasePaths;
2021

2122
public:
2223
PluginManager();
2324
~PluginManager();
2425

26+
std::string GetPluginBasePath(std::string plugin_name);
27+
2528
bool PluginExists(std::string plugin_name);
2629

2730
void LoadPlugins(std::string directory);
@@ -44,6 +47,5 @@ class PluginManager
4447
};
4548

4649
extern PluginManager* g_pluginManager;
47-
extern std::map<std::string, std::string> pluginBasePaths;
4850

4951
#endif

src/plugins/core/scripting/convars.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ PluginConvars::PluginConvars(std::string m_plugin_name)
1010
void PluginConvars::CreateFake(std::string cvarname, int32_t type, std::any defaultValue, bool prot)
1111
{
1212
if (type < 0 || type > 14) return;
13-
if (fakeConvars.find(cvarname) != fakeConvars.end()) return;
13+
if (FakeConvarExists(cvarname)) return;
1414
if (FetchCVar(cvarname)) return;
1515

1616
auto cvar = new FakeConVar(cvarname, (EConVarType)type, defaultValue, prot);
17-
fakeConvars.insert({ cvarname, cvar });
17+
InsertFakeConvar(cvarname, cvar);
1818
}
1919

2020
void PluginConvars::CreateFakeLua(std::string cvarname, int32_t type, luabridge::LuaRef defaultValue, bool prot)
@@ -83,11 +83,11 @@ void PluginConvars::CreateFakeLua(std::string cvarname, int32_t type, luabridge:
8383

8484
void PluginConvars::DeleteFake(std::string cvarname)
8585
{
86-
if (fakeConvars.find(cvarname) == fakeConvars.end()) return;
86+
if (!FakeConvarExists(cvarname)) return;
8787

88-
auto cvar = fakeConvars.at(cvarname);
88+
auto cvar = GetFakeConvar(cvarname);
8989
delete cvar;
90-
fakeConvars.erase(cvarname);
90+
DeleteFakeConvar(cvarname);
9191
}
9292

9393
std::any PluginConvars::GetConvarValue(std::string cvarname)

src/plugins/core/scripting/utils.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ std::string scripting_GetPluginPath(std::string plugin_name)
4141
Plugin* plugin = g_pluginManager->FetchPlugin(plugin_name);
4242
if (!plugin) return "";
4343

44-
return string_format("%s/%s", pluginBasePaths[plugin_name].c_str(), plugin->GetName().c_str());
44+
return string_format("%s/%s", g_pluginManager->GetPluginBasePath(plugin_name).c_str(), plugin->GetName().c_str());
4545
}
4646

4747
PluginUserMessage scripting_GetUserMessage(std::string uuid)

0 commit comments

Comments
 (0)