diff --git a/core/metamod.cpp b/core/metamod.cpp index c21729c..a1a2dc3 100644 --- a/core/metamod.cpp +++ b/core/metamod.cpp @@ -195,6 +195,11 @@ static class ProviderCallbacks : public IMetamodSourceProviderCallbacks ITER_EVENT(OnLevelShutdown, ()); } + virtual bool OnCommand_Meta(IMetamodSourceCommandInfo* info) override + { + return Command_Meta(info); + } + virtual bool OnCommand_ClientMeta(edict_t* client, IMetamodSourceCommandInfo* info) override { return Command_ClientMeta(client, info); diff --git a/core/metamod_provider.h b/core/metamod_provider.h index 7387af0..e1065d6 100644 --- a/core/metamod_provider.h +++ b/core/metamod_provider.h @@ -90,6 +90,11 @@ namespace SourceMM */ virtual void OnLevelShutdown() = 0; + /** + * @brief Called when the ConCommand "meta" is executed + */ + virtual bool OnCommand_Meta(IMetamodSourceCommandInfo* info) = 0; + /** * @brief Called when a client executes "meta" as a ClientCommand */ diff --git a/core/provider/source/provider_source.cpp b/core/provider/source/provider_source.cpp index ebec087..d5eb3ed 100644 --- a/core/provider/source/provider_source.cpp +++ b/core/provider/source/provider_source.cpp @@ -30,14 +30,12 @@ #include #include -#if SOURCE_ENGINE >= SE_ORANGEBOX -void LocalCommand_Meta(const CCommand& args); -#else -void LocalCommand_Meta(); -#endif - ConCommand meta_local_cmd("meta", LocalCommand_Meta, "Metamod:Source control options"); +static SourceProvider g_SourceProvider; + +IMetamodSourceProvider* provider = &g_SourceProvider; + SH_DECL_HOOK0(IServerGameDLL, GameInit, SH_NOATTRIB, 0, bool); SH_DECL_HOOK6(IServerGameDLL, LevelInit, SH_NOATTRIB, 0, bool, const char*, const char*, const char*, const char*, bool, bool); SH_DECL_HOOK0_void(IServerGameDLL, LevelShutdown, SH_NOATTRIB, 0); @@ -466,7 +464,12 @@ void LocalCommand_Meta() { GlobCommand cmd; #endif - Command_Meta(&cmd); + + if (nullptr != g_SourceProvider.m_pCallbacks) + { + GlobCommand cmd(&args); + g_SourceProvider.m_pCallbacks->OnCommand_Meta(&cmd); + } } #if SOURCE_ENGINE == SE_CSGO || SOURCE_ENGINE == SE_BLADE || SOURCE_ENGINE == SE_MCV @@ -661,7 +664,3 @@ void SourceProvider::Hook_ClientCommand(edict_t * client) RETURN_META(MRES_IGNORED); } - -static SourceProvider g_SourceProvider; - -IMetamodSourceProvider* provider = &g_SourceProvider; \ No newline at end of file diff --git a/core/provider/source/provider_source.h b/core/provider/source/provider_source.h index 425e6cc..3029e80 100644 --- a/core/provider/source/provider_source.h +++ b/core/provider/source/provider_source.h @@ -115,6 +115,12 @@ private: IFileSystem* baseFs = nullptr; std::vector usermsgs_list; bool bOriginalEngine = false; + +#if SOURCE_ENGINE >= SE_ORANGEBOX + friend void LocalCommand_Meta(const CCommand& args); +#else + friend void LocalCommand_Meta(); +#endif }; #endif diff --git a/core/provider/source2/provider_source2.cpp b/core/provider/source2/provider_source2.cpp index 34eb0e1..d81d3f3 100644 --- a/core/provider/source2/provider_source2.cpp +++ b/core/provider/source2/provider_source2.cpp @@ -33,7 +33,11 @@ #include #include -void LocalCommand_Meta(const CCommand& args); + +static Source2Provider g_Source2Provider; + +IMetamodSourceProvider* provider = &g_Source2Provider; + ConCommand meta_local_cmd("meta", LocalCommand_Meta, "Metamod:Source control options"); @@ -346,8 +350,11 @@ private: void LocalCommand_Meta(const CCommand& args) { - GlobCommand cmd(&args); - Command_Meta(&cmd); + if (nullptr != g_Source2Provider.m_pCallbacks) + { + GlobCommand cmd(&args); + g_Source2Provider.m_pCallbacks->OnCommand_Meta(&cmd); + } } bool Source2Provider::KVLoadFromFile(KeyValues* kv, IFileSystem* filesystem, const char* resourceName, const char* pathID) @@ -447,7 +454,3 @@ void Source2Provider::Hook_ClientCommand(CEntityIndex index, const CCommand& _cm RETURN_META(MRES_IGNORED); } - -static Source2Provider g_Source2Provider; - -IMetamodSourceProvider* provider = &g_Source2Provider; \ No newline at end of file diff --git a/core/provider/source2/provider_source2.h b/core/provider/source2/provider_source2.h index a26bebe..ff90d6e 100644 --- a/core/provider/source2/provider_source2.h +++ b/core/provider/source2/provider_source2.h @@ -77,6 +77,8 @@ private: private: IFileSystem* baseFs = nullptr; std::string sLastMap; + + friend void LocalCommand_Meta(const CCommand& args); }; #endif