Skip to content

Commit d6cfe05

Browse files
committed
fix(pluginmanager): Invalid paths
1 parent f9e8ee5 commit d6cfe05

File tree

6 files changed

+39
-31
lines changed

6 files changed

+39
-31
lines changed

src/entrypoint.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@ CGameEntitySystem* GameEntitySystem()
9292
CUtlVector<FuncHookBase*> g_vecHooks;
9393
std::map<std::string, PluginUserMessage> scriptingUserMessages;
9494
std::map<std::string, FakeConVar*> fakeConvars;
95+
std::map<std::string, std::string> pluginBasePaths;
9596

9697
Addons g_addons;
9798
CommandsManager* g_commandsManager = nullptr;

src/plugins/Plugin.h

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

44
#include <string>
55
#include <vector>
6+
#include <map>
67
#include "../types/PluginKind.h"
78
#include "../types/PluginState.h"
89
#include "../types/EventResult.h"
@@ -35,17 +36,19 @@ class Plugin
3536
virtual bool ExecuteStart() = 0;
3637
virtual void ExecuteStop() = 0;
3738

38-
virtual void ExecuteCommand(void *functionPtr, std::string name, int slot, std::vector<std::string> args, bool silent, std::string prefix) = 0;
39+
virtual void ExecuteCommand(void* functionPtr, std::string name, int slot, std::vector<std::string> args, bool silent, std::string prefix) = 0;
3940

40-
virtual void RegisterEventHandler(void *functionPtr) = 0;
41+
virtual void RegisterEventHandler(void* functionPtr) = 0;
4142
virtual void RegisterEventHandling(std::string eventName) = 0;
4243

4344
virtual std::string GetAuthor() = 0;
4445
virtual std::string GetWebsite() = 0;
4546
virtual std::string GetVersion() = 0;
4647
virtual std::string GetPlName() = 0;
4748

48-
virtual EventResult TriggerEvent(std::string invokedBy, std::string eventName, std::string eventPayload, PluginEvent *event) = 0;
49+
virtual EventResult TriggerEvent(std::string invokedBy, std::string eventName, std::string eventPayload, PluginEvent* event) = 0;
4950
};
5051

52+
extern std::map<std::string, std::string> pluginBasePaths;
53+
5154
#endif

src/plugins/PluginManager.cpp

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,11 @@ bool PluginManager::PluginExists(std::string plugin_name)
1919

2020
void PluginManager::LoadPlugins(std::string directory)
2121
{
22-
if (!Files::ExistsPath("addons/swiftly/plugins" + directory))
23-
Files::CreateDirectory("addons/swiftly/plugins" + directory);
22+
std::string baseDir = "addons/swiftly/plugins" + directory;
23+
if (!Files::ExistsPath(baseDir))
24+
Files::CreateDirectory(baseDir);
2425

25-
std::vector<std::string> plugins = Files::FetchDirectories("addons/swiftly/plugins" + directory);
26+
std::vector<std::string> plugins = Files::FetchDirectories(baseDir);
2627
for (std::string folder : plugins)
2728
{
2829
// Skips over disabled
@@ -35,18 +36,20 @@ void PluginManager::LoadPlugins(std::string directory)
3536
LoadPlugins(directory + "/" + directory_name);
3637
else
3738
{
38-
folder = replace(folder, "addons/swiftly/plugins" + directory, "");
39+
folder = replace(folder, baseDir, "");
3940
std::string plugin_name = replace(folder, WIN_LINUX("\\", "/"), "");
4041

41-
LoadPlugin(plugin_name);
42+
pluginBasePaths[plugin_name] = baseDir;
43+
44+
LoadPlugin(plugin_name);
4245
}
4346
}
4447
}
4548

4649
void PluginManager::UnloadPlugins()
4750
{
4851
std::vector<std::string> pluginNames;
49-
for (Plugin *plugin : pluginsList)
52+
for (Plugin* plugin : pluginsList)
5053
pluginNames.push_back(plugin->GetName());
5154

5255
for (std::string plugin_name : pluginNames)
@@ -58,11 +61,11 @@ void PluginManager::LoadPlugin(std::string plugin_name)
5861
if (PluginExists(plugin_name))
5962
return;
6063

61-
std::vector<std::string> files = Files::FetchFileNames("addons/swiftly/plugins/" + plugin_name);
64+
std::vector<std::string> files = Files::FetchFileNames(pluginBasePaths[plugin_name] + "/" + plugin_name);
6265
if (files.size() == 0)
6366
return;
6467

65-
Plugin *plugin = nullptr;
68+
Plugin* plugin = nullptr;
6669

6770
for (std::string file : files)
6871
{
@@ -80,15 +83,15 @@ void PluginManager::LoadPlugin(std::string plugin_name)
8083
}
8184

8285
pluginsList.push_back(plugin);
83-
pluginsMap.insert({plugin_name, plugin});
86+
pluginsMap.insert({ plugin_name, plugin });
8487
}
8588

8689
void PluginManager::UnloadPlugin(std::string plugin_name)
8790
{
8891
if (!PluginExists(plugin_name))
8992
return;
9093

91-
Plugin *plugin = pluginsMap.at(plugin_name);
94+
Plugin* plugin = pluginsMap.at(plugin_name);
9295

9396
auto it = std::find(pluginsList.begin(), pluginsList.end(), plugin);
9497
if (it != pluginsList.end())
@@ -100,7 +103,7 @@ void PluginManager::UnloadPlugin(std::string plugin_name)
100103

101104
void PluginManager::StartPlugins()
102105
{
103-
for (Plugin *plugin : pluginsList)
106+
for (Plugin* plugin : pluginsList)
104107
if (!StartPlugin(plugin->GetName()))
105108
StopPlugin(plugin->GetName());
106109

@@ -109,15 +112,15 @@ void PluginManager::StartPlugins()
109112

110113
msgpack::pack(ss, eventData);
111114

112-
PluginEvent *event = new PluginEvent("core", nullptr, nullptr);
115+
PluginEvent* event = new PluginEvent("core", nullptr, nullptr);
113116
this->ExecuteEvent("core", "OnAllPluginsLoaded", ss.str(), event);
114117
delete event;
115118
AllPluginsStarted = true;
116119
}
117120

118121
void PluginManager::StopPlugins()
119122
{
120-
for (Plugin *plugin : pluginsList)
123+
for (Plugin* plugin : pluginsList)
121124
StopPlugin(plugin->GetName());
122125
}
123126

@@ -126,7 +129,7 @@ bool PluginManager::StartPlugin(std::string plugin_name)
126129
if (!PluginExists(plugin_name))
127130
return false;
128131

129-
Plugin *plugin = pluginsMap.at(plugin_name);
132+
Plugin* plugin = pluginsMap.at(plugin_name);
130133
if (plugin->GetPluginState() == PluginState_t::Started)
131134
return true;
132135

@@ -143,7 +146,7 @@ bool PluginManager::StartPlugin(std::string plugin_name)
143146

144147
msgpack::pack(ss, eventData);
145148

146-
PluginEvent *event = new PluginEvent("core", nullptr, nullptr);
149+
PluginEvent* event = new PluginEvent("core", nullptr, nullptr);
147150
plugin->TriggerEvent("core", "OnAllPluginsLoaded", ss.str(), event);
148151
delete event;
149152
}
@@ -156,7 +159,7 @@ void PluginManager::StopPlugin(std::string plugin_name)
156159
if (!PluginExists(plugin_name))
157160
return;
158161

159-
Plugin *plugin = pluginsMap.at(plugin_name);
162+
Plugin* plugin = pluginsMap.at(plugin_name);
160163
if (plugin->GetPluginState() == PluginState_t::Stopped)
161164
return;
162165

@@ -167,17 +170,17 @@ void PluginManager::StopPlugin(std::string plugin_name)
167170
g_MenuManager->UnregisterPluginMenus(plugin_name);
168171
}
169172

170-
Plugin *PluginManager::FetchPlugin(std::string name)
173+
Plugin* PluginManager::FetchPlugin(std::string name)
171174
{
172175
if (!PluginExists(name))
173176
return nullptr;
174177

175178
return pluginsMap.at(name);
176179
}
177180

178-
EventResult PluginManager::ExecuteEvent(std::string invokedBy, std::string eventName, std::string eventPayload, PluginEvent *event)
181+
EventResult PluginManager::ExecuteEvent(std::string invokedBy, std::string eventName, std::string eventPayload, PluginEvent* event)
179182
{
180-
for (Plugin *plugin : this->pluginsList)
183+
for (Plugin* plugin : this->pluginsList)
181184
{
182185
EventResult result = plugin->TriggerEvent(invokedBy, eventName, eventPayload, event);
183186
if (result != EventResult::Continue)
@@ -187,7 +190,7 @@ EventResult PluginManager::ExecuteEvent(std::string invokedBy, std::string event
187190
return EventResult::Continue;
188191
}
189192

190-
std::vector<Plugin *> PluginManager::GetPluginsList()
193+
std::vector<Plugin*> PluginManager::GetPluginsList()
191194
{
192195
return this->pluginsList;
193196
}

src/plugins/PluginManager.h

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ class PluginEvent;
1515
class PluginManager
1616
{
1717
private:
18-
std::vector<Plugin *> pluginsList;
19-
std::map<std::string, Plugin *> pluginsMap;
18+
std::vector<Plugin*> pluginsList;
19+
std::map<std::string, Plugin*> pluginsMap;
2020

2121
public:
2222
PluginManager();
@@ -36,13 +36,14 @@ class PluginManager
3636
bool StartPlugin(std::string plugin_name);
3737
void StopPlugin(std::string plugin_name);
3838

39-
Plugin *FetchPlugin(std::string name);
39+
Plugin* FetchPlugin(std::string name);
4040

41-
std::vector<Plugin *> GetPluginsList();
41+
std::vector<Plugin*> GetPluginsList();
4242

43-
EventResult ExecuteEvent(std::string invokedBy, std::string eventName, std::string eventPayload, PluginEvent *event);
43+
EventResult ExecuteEvent(std::string invokedBy, std::string eventName, std::string eventPayload, PluginEvent* event);
4444
};
4545

46-
extern PluginManager *g_pluginManager;
46+
extern PluginManager* g_pluginManager;
47+
extern std::map<std::string, std::string> pluginBasePaths;
4748

4849
#endif

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("addons/swiftly/plugins/%s", plugin->GetName().c_str());
44+
return string_format("%s/%s", pluginBasePaths[plugin_name].c_str(), plugin->GetName().c_str());
4545
}
4646

4747
PluginUserMessage scripting_GetUserMessage(std::string uuid)

src/plugins/lua/LuaPlugin.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ bool LuaPlugin::LoadScriptingEnvironment()
102102

103103
luabridge::setGlobal(this->state, NULL, "AddGlobalEvents");
104104

105-
std::vector<std::string> files = Files::FetchFileNames("addons/swiftly/plugins/" + this->GetName());
105+
std::vector<std::string> files = Files::FetchFileNames(pluginBasePaths[this->GetName()] + "/" + this->GetName());
106106
for (std::string file : files)
107107
{
108108
if (ends_with(file, ".lua"))

0 commit comments

Comments
 (0)