Fixed cPluginManager:AddHook() binding.
Fixes #401. Old formats are still accepted, for compatibility reasons.
This commit is contained in:
parent
0a712931b1
commit
84bf32f857
@ -1713,7 +1713,7 @@ cPluginManager.AddHook(cPluginManager.HOOK_CHAT, OnChatMessage);
|
||||
ForceExecuteCommand = { Params = "{{cPlayer|Player}}, CommandStr", Return = "bool", Notes = "Same as ExecuteCommand, but doesn't check permissions" },
|
||||
ForEachCommand = { Params = "CallbackFn", Return = "bool", Notes = "Calls the CallbackFn function for each command that has been bound using BindCommand(). The CallbackFn has the following signature: <pre class=\"prettyprint lang-lua\">function(Command, Permission, HelpString)</pre>. If the callback returns true, the enumeration is aborted and this API function returns false; if it returns false or no value, the enumeration continues with the next command, and the API function returns true." },
|
||||
ForEachConsoleCommand = { Params = "CallbackFn", Return = "bool", Notes = "Calls the CallbackFn function for each command that has been bound using BindConsoleCommand(). The CallbackFn has the following signature: <pre class=\"prettyprint lang-lua\">function (Command, HelpString)</pre>. If the callback returns true, the enumeration is aborted and this API function returns false; if it returns false or no value, the enumeration continues with the next command, and the API function returns true." },
|
||||
Get = { Params = "", Return = "cPluginManager", Notes = "Returns the single instance of the plugin manager" },
|
||||
Get = { Params = "", Return = "cPluginManager", Notes = "(STATIC) Returns the single instance of the plugin manager" },
|
||||
GetAllPlugins = { Params = "", Return = "table", Notes = "Returns a table (dictionary) of all plugins, [name => {{cPlugin}}] pairing." },
|
||||
GetCommandPermission = { Params = "Command", Return = "Permission", Notes = "Returns the permission needed for executing the specified command" },
|
||||
GetCurrentPlugin = { Params = "", Return = "{{cPlugin}}", Notes = "Returns the {{cPlugin}} object for the calling plugin. This is the same object that the Initialize function receives as the argument." },
|
||||
|
@ -84,7 +84,7 @@ end
|
||||
To register a hook, insert the following code template into the "-- Hooks" area in the previous code example.
|
||||
</p>
|
||||
<pre class="prettyprint lang-lua">
|
||||
cPluginManager.AddHook(cPluginManager.HOOK_NAME_HERE, FunctionNameToBeCalled)
|
||||
cPluginManager:AddHook(cPluginManager.HOOK_NAME_HERE, FunctionNameToBeCalled)
|
||||
</pre>
|
||||
<p>
|
||||
What does this code do?
|
||||
@ -102,7 +102,7 @@ function Initialize(Plugin)
|
||||
Plugin:SetName("DerpyPlugin")
|
||||
Plugin:SetVersion(1)
|
||||
|
||||
cPluginManager.AddHook(cPluginManager.HOOK_PLAYER_MOVING, OnPlayerMoving)
|
||||
cPluginManager:AddHook(cPluginManager.HOOK_PLAYER_MOVING, OnPlayerMoving)
|
||||
|
||||
local PluginManager = cPluginManager:Get()
|
||||
-- Command bindings
|
||||
@ -200,7 +200,7 @@ function Initialize(Plugin)
|
||||
local PluginManager = cPluginManager:Get()
|
||||
PluginManager:BindCommand("/explode", "derpyplugin.explode", Explode, " ~ Explode a player");
|
||||
|
||||
cPluginManager.AddHook(cPluginManager.HOOK_COLLECTING_PICKUP, OnCollectingPickup)
|
||||
cPluginManager:AddHook(cPluginManager.HOOK_COLLECTING_PICKUP, OnCollectingPickup)
|
||||
|
||||
LOG("Initialised " .. Plugin:GetName() .. " v." .. Plugin:GetVersion())
|
||||
return true
|
||||
|
@ -1177,7 +1177,7 @@ function WriteHtmlHook(a_Hook, a_HookNav)
|
||||
f:write("</table>\n<p>" .. (a_Hook.Returns or "") .. "</p>\n\n");
|
||||
f:write([[<hr /><h1>Code examples</h1><h2>Registering the callback</h2>]]);
|
||||
f:write("<pre class=\"prettyprint lang-lua\">\n");
|
||||
f:write([[cPluginManager.AddHook(cPluginManager.]] .. a_Hook.Name .. ", My" .. a_Hook.DefaultFnName .. [[);]]);
|
||||
f:write([[cPluginManager:AddHook(cPluginManager.]] .. a_Hook.Name .. ", My" .. a_Hook.DefaultFnName .. [[);]]);
|
||||
f:write("</pre>\n\n");
|
||||
local Examples = a_Hook.CodeExamples or {};
|
||||
for i, example in ipairs(Examples) do
|
||||
|
@ -963,3 +963,22 @@ end
|
||||
|
||||
|
||||
|
||||
|
||||
-- Test the hook adding formats in #121 and #401
|
||||
local function DoNothing()
|
||||
end
|
||||
|
||||
LOG("Trying cPluginManager:AddHook()");
|
||||
cPluginManager:AddHook(cPluginManager.HOOK_CHAT, DoNothing);
|
||||
|
||||
LOG("Trying cPluginManager.AddHook()");
|
||||
cPluginManager.AddHook(cPluginManager.HOOK_CHAT, DoNothing);
|
||||
|
||||
LOG("Trying cPluginManager:Get():AddHook()");
|
||||
cPluginManager:Get():AddHook(cPluginManager.HOOK_CHAT, DoNothing);
|
||||
|
||||
LOG("Trying cPluginManager:Get():AddHook(Plugin, Hook)");
|
||||
cPluginManager:Get():AddHook(cPluginManager:GetCurrentPlugin(), cPluginManager.HOOK_CHAT);
|
||||
|
||||
LOG("Trying cPluginManager.AddHook(Plugin, Hook)");
|
||||
cPluginManager.AddHook(cPluginManager:GetCurrentPlugin(), cPluginManager.HOOK_CHAT);
|
||||
|
@ -1137,16 +1137,17 @@ static int tolua_cPluginManager_AddHook(lua_State * tolua_S)
|
||||
{
|
||||
/*
|
||||
Function signatures:
|
||||
cPluginManager.AddHook(HOOK_TYPE, CallbackFunction) -- (1) recommended
|
||||
cPluginManager:Get():AddHook(HOOK_TYPE, CallbackFunction) -- (2) accepted silently
|
||||
cPluginManager:Get():AddHook(Plugin, HOOK_TYPE) -- (3) old style (#121), accepted but complained about
|
||||
cPluginManager.AddHook(Plugin, HOOK_TYPE) -- (4) old style (#121) mangled, accepted but complained about
|
||||
cPluginManager:AddHook(HOOK_TYPE, CallbackFunction) -- (1) recommended
|
||||
cPluginManager.AddHook(HOOK_TYPE, CallbackFunction) -- (2) accepted silently (#401 deprecates this)
|
||||
cPluginManager:Get():AddHook(HOOK_TYPE, CallbackFunction) -- (3) accepted silently
|
||||
cPluginManager:Get():AddHook(Plugin, HOOK_TYPE) -- (4) old style (#121), accepted but complained about in the console
|
||||
cPluginManager.AddHook(Plugin, HOOK_TYPE) -- (5) old style (#121) mangled, accepted but complained about in the console
|
||||
*/
|
||||
|
||||
cLuaState S(tolua_S);
|
||||
cPluginManager * PlgMgr = cPluginManager::Get();
|
||||
|
||||
// If the first param is a cPluginManager, use it instead of the global one:
|
||||
// If the first param is a cPluginManager instance, use it instead of the global one:
|
||||
int ParamIdx = 1;
|
||||
tolua_Error err;
|
||||
if (tolua_isusertype(S, 1, "cPluginManager", 0, &err))
|
||||
@ -1161,6 +1162,12 @@ static int tolua_cPluginManager_AddHook(lua_State * tolua_S)
|
||||
}
|
||||
ParamIdx += 1;
|
||||
}
|
||||
else if (tolua_isusertable(S, 1, "cPluginManager", 0, &err))
|
||||
{
|
||||
LOGD("AddHook recommended style");
|
||||
// Style 1, use the global PlgMgr, but increment ParamIdx
|
||||
ParamIdx++;
|
||||
}
|
||||
|
||||
if (lua_isnumber(S, ParamIdx) && lua_isfunction(S, ParamIdx + 1))
|
||||
{
|
||||
@ -1177,7 +1184,7 @@ static int tolua_cPluginManager_AddHook(lua_State * tolua_S)
|
||||
|
||||
AString ParamDesc;
|
||||
Printf(ParamDesc, "%s, %s, %s", S.GetTypeText(1).c_str(), S.GetTypeText(2).c_str(), S.GetTypeText(3).c_str());
|
||||
LOGWARNING("cPluginManager.AddHook(): bad parameters. Expected HOOK_TYPE and CallbackFunction, got %s. Hook not added.", ParamDesc.c_str());
|
||||
LOGWARNING("cPluginManager:AddHook(): bad parameters. Expected HOOK_TYPE and CallbackFunction, got %s. Hook not added.", ParamDesc.c_str());
|
||||
S.LogStackTrace();
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user