在SourceMod中,如何检查插件是否存在?

时间:2014-01-24 15:30:38

标签: scripting game-development steam

在SourceMod中,如何检查插件是否存在?我尝试了GetFeatureStatus方法,但它不起作用。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

如果插件已将自身注册为库,您可以使用其注册名称上的LibraryExists命令检查它是否存在。传统上,此名称全部为小写,但某些插件/扩展名使用混合大小写,例如SteamTools(使用“SteamTools”)。

话虽如此,通常最好缓存一个库是否存在而不是经常调用此命令......但是在你不知情的情况下可以卸载或加载一个库。有一些功能可以捕获它。

所以,最好的方法通常是做这样的事情(以NativeVotes插件为例)。

#undef REQUIRE_PLUGIN
#include <nativevotes>

//global variable
new bool:g_bNativeVotes = false;

public OnAllPluginsLoaded()
{
    g_bNativeVotes = LibraryExists("nativevotes");
}

public OnLibraryAdded(const String:name[])
{
    if (StrEqual(name, "nativevotes"))
    {
        g_bNativeVotes = true;
    }
}

public OnLibraryRemoved(const String:name[])
{
    if (StrEqual(name, "nativevotes"))
    {
        g_bNativeVotes = false;
    }
}

如果插件未注册为库,则可以使用GetFeatureStatus检查特定的本机。问题在于意识到此函数不返回bool,而是返回FeatureStatus_值。

例如,以下是我如何检查上述相同插件的(开发中)功能:

if (GetFeatureStatus(FeatureType_Native, "NativeVotes_IsVoteCommandRegistered") == FeatureStatus_Available)
{
    // Do something with vote commands.
}