Skip to content

Commit 123bbcd

Browse files
committed
Add custom cfg parser to bypass ConVar whitelist
1 parent 902372b commit 123bbcd

3 files changed

Lines changed: 29 additions & 2 deletions

File tree

README.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,4 +41,3 @@ IMultiAddonManager *pInterface = (IMultiAddonManager*)g_SMAPI->MetaFactory(MULTI
4141
- Download the [latest release package](https://github.com/Source2ZE/MultiAddonManager/releases/latest) for your OS
4242
- Extract the package contents into `game/csgo` on your server
4343
- Edit the config file at `game/csgo/cfg/multiaddonmanager/multiaddonmanager.cfg`
44-
- **Recommended:** Add `-disable_workshop_command_filtering` to your server startup parameters, otherwise plugin configs won't execute if an addon or a workshop map is loaded.

src/multiaddonmanager.cpp

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include "steam/steam_gameserver.h"
3636
#include <string>
3737
#include <sstream>
38+
#include <fstream>
3839
#include "iserver.h"
3940

4041
#include "tier0/memdbgon.h"
@@ -377,7 +378,7 @@ bool MultiAddonManager::Load(PluginId id, ISmmAPI *ismm, char *error, size_t max
377378

378379
META_CONVAR_REGISTER(FCVAR_RELEASE);
379380

380-
g_pEngineServer->ServerCommand("exec multiaddonmanager/multiaddonmanager");
381+
ParseCfg();
381382

382383
Message("Plugin loaded successfully!\n");
383384

@@ -447,6 +448,32 @@ void *MultiAddonManager::OnMetamodQuery(const char *iface, int *ret)
447448
return static_cast<IMultiAddonManager*>(&g_MultiAddonManager);
448449
}
449450

451+
void MultiAddonManager::ParseCfg()
452+
{
453+
char szPath[MAX_PATH];
454+
V_snprintf(szPath, sizeof(szPath), "%s/csgo/cfg/multiaddonmanager/multiaddonmanager.cfg", Plat_GetGameDirectory());
455+
std::ifstream cfgFile(szPath);
456+
457+
if (!cfgFile.is_open())
458+
{
459+
Message("Unable to open & execute custom cfg file \"multiaddonmanager/multiaddonmanager\"\n");
460+
return;
461+
}
462+
463+
Message("Executing custom cfg file \"multiaddonmanager/multiaddonmanager\"\n");
464+
465+
std::string strCommand;
466+
467+
while (std::getline(cfgFile, strCommand))
468+
{
469+
if (!strCommand.empty() && strCommand.back() == '\r')
470+
strCommand.pop_back();
471+
472+
if (!strCommand.empty())
473+
g_pEngineServer->ServerCommand(strCommand.c_str());
474+
}
475+
}
476+
450477
void MultiAddonManager::BuildAddonPath(const char *pszAddon, char *buf, size_t len, bool bLegacy = false)
451478
{
452479
// The workshop on a dedicated server is stored relative to the working directory for whatever reason

src/multiaddonmanager.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ class MultiAddonManager : public ISmmPlugin, public IMetamodListener, public IMu
5555
int Hook_LoadEventsFromFile(const char *filename, bool bSearchAll);
5656
bool Hook_CanHLTVClientConnect(int index, const CSteamID &steamID, int *pRejectReason);
5757

58+
void ParseCfg();
5859
void BuildAddonPath(const char *pszAddon, char *buf, size_t len, bool bLegacy);
5960
bool MountAddon(const char *pszAddon, bool bAddToTail);
6061
bool UnmountAddon(const char *pszAddon);

0 commit comments

Comments
 (0)