1

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

4

1 回答 1

4

如果插件已将自己注册为库,您可以使用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 来检查特定的原生。关键在于意识到这个函数不返回布尔值,而是一个FeatureStatus_值。

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

if (GetFeatureStatus(FeatureType_Native, "NativeVotes_IsVoteCommandRegistered") == FeatureStatus_Available)
{
    // Do something with vote commands.
}
于 2014-01-24T15:42:33.663 回答