在SourceMod中,如何检查插件是否存在?我尝试了GetFeatureStatus
方法,但它不起作用。有什么想法吗?
答案 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.
}