HandleCommand now returns an CommandResult enum.
This commit is contained in:
parent
8928310fd8
commit
15ae4ce233
@ -257,18 +257,13 @@ bool cPluginManager::CallHookBlockToPickups(
|
|||||||
|
|
||||||
bool cPluginManager::CallHookChat(cPlayer * a_Player, AString & a_Message)
|
bool cPluginManager::CallHookChat(cPlayer * a_Player, AString & a_Message)
|
||||||
{
|
{
|
||||||
bool WasCommandForbidden = false;
|
if (HandleCommand(a_Player, a_Message, true) != crUnknownCommand) // We use HandleCommand as opposed to ExecuteCommand to accomodate the need to the WasCommandForbidden bool
|
||||||
if (HandleCommand(a_Player, a_Message, true, WasCommandForbidden)) // We use HandleCommand as opposed to ExecuteCommand to accomodate the need to the WasCommandForbidden bool
|
|
||||||
{
|
{
|
||||||
return true; // Chat message was handled as command
|
return true; // Chat message was handled as command
|
||||||
}
|
}
|
||||||
else if (WasCommandForbidden) // Couldn't be handled as command, was it because of insufficient permissions?
|
|
||||||
{
|
|
||||||
return true; // Yes - message was sent in HandleCommand, abort
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if it was a standard command (starts with a slash)
|
// Check if it was a standard command (starts with a slash)
|
||||||
// If it was, we know that it was completely unrecognised (WasCommandForbidden == false)
|
// If it was, we know that it was completely unrecognised
|
||||||
if (!a_Message.empty() && (a_Message[0] == '/'))
|
if (!a_Message.empty() && (a_Message[0] == '/'))
|
||||||
{
|
{
|
||||||
AStringVector Split(StringSplit(a_Message, " "));
|
AStringVector Split(StringSplit(a_Message, " "));
|
||||||
@ -1318,28 +1313,28 @@ bool cPluginManager::CallHookWorldTick(cWorld & a_World, float a_Dt, int a_LastT
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool cPluginManager::HandleCommand(cPlayer * a_Player, const AString & a_Command, bool a_ShouldCheckPermissions, bool & a_WasCommandForbidden)
|
cPluginManager::CommandResult cPluginManager::HandleCommand(cPlayer * a_Player, const AString & a_Command, bool a_ShouldCheckPermissions)
|
||||||
{
|
{
|
||||||
ASSERT(a_Player != NULL);
|
ASSERT(a_Player != NULL);
|
||||||
|
|
||||||
AStringVector Split(StringSplit(a_Command, " "));
|
AStringVector Split(StringSplit(a_Command, " "));
|
||||||
if (Split.empty())
|
if (Split.empty())
|
||||||
{
|
{
|
||||||
return false;
|
return crUnknownCommand;
|
||||||
}
|
}
|
||||||
|
|
||||||
CommandMap::iterator cmd = m_Commands.find(Split[0]);
|
CommandMap::iterator cmd = m_Commands.find(Split[0]);
|
||||||
if (cmd == m_Commands.end())
|
if (cmd == m_Commands.end())
|
||||||
{
|
{
|
||||||
// Command not found
|
// Command not found
|
||||||
return false;
|
return crUnknownCommand;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ask plugins first if a command is okay to execute the command:
|
// Ask plugins first if a command is okay to execute the command:
|
||||||
if (CallHookExecuteCommand(a_Player, Split))
|
if (CallHookExecuteCommand(a_Player, Split))
|
||||||
{
|
{
|
||||||
LOGINFO("Player %s tried executing command \"%s\" that was stopped by the HOOK_EXECUTE_COMMAND hook", a_Player->GetName().c_str(), Split[0].c_str());
|
LOGINFO("Player %s tried executing command \"%s\" that was stopped by the HOOK_EXECUTE_COMMAND hook", a_Player->GetName().c_str(), Split[0].c_str());
|
||||||
return false;
|
return crError;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
@ -1350,8 +1345,7 @@ bool cPluginManager::HandleCommand(cPlayer * a_Player, const AString & a_Command
|
|||||||
{
|
{
|
||||||
a_Player->SendMessageFailure(Printf("Forbidden command; insufficient privileges: \"%s\"", Split[0].c_str()));
|
a_Player->SendMessageFailure(Printf("Forbidden command; insufficient privileges: \"%s\"", Split[0].c_str()));
|
||||||
LOGINFO("Player %s tried to execute forbidden command: \"%s\"", a_Player->GetName().c_str(), Split[0].c_str());
|
LOGINFO("Player %s tried to execute forbidden command: \"%s\"", a_Player->GetName().c_str(), Split[0].c_str());
|
||||||
a_WasCommandForbidden = true;
|
return crError;
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ASSERT(cmd->second.m_Plugin != NULL);
|
ASSERT(cmd->second.m_Plugin != NULL);
|
||||||
@ -1359,10 +1353,10 @@ bool cPluginManager::HandleCommand(cPlayer * a_Player, const AString & a_Command
|
|||||||
if (!cmd->second.m_Plugin->HandleCommand(Split, a_Player))
|
if (!cmd->second.m_Plugin->HandleCommand(Split, a_Player))
|
||||||
{
|
{
|
||||||
a_Player->SendMessageFailure(Printf("Something went wrong while executing command \"%s\"", Split[0].c_str()));
|
a_Player->SendMessageFailure(Printf("Something went wrong while executing command \"%s\"", Split[0].c_str()));
|
||||||
return true; // The command handler was found and executed, so we return true.
|
return crError;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return crExecuted;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1561,7 +1555,7 @@ AString cPluginManager::GetCommandPermission(const AString & a_Command)
|
|||||||
|
|
||||||
bool cPluginManager::ExecuteCommand(cPlayer * a_Player, const AString & a_Command)
|
bool cPluginManager::ExecuteCommand(cPlayer * a_Player, const AString & a_Command)
|
||||||
{
|
{
|
||||||
return HandleCommand(a_Player, a_Command, true);
|
return (HandleCommand(a_Player, a_Command, true) == crExecuted);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1570,7 +1564,7 @@ bool cPluginManager::ExecuteCommand(cPlayer * a_Player, const AString & a_Comman
|
|||||||
|
|
||||||
bool cPluginManager::ForceExecuteCommand(cPlayer * a_Player, const AString & a_Command)
|
bool cPluginManager::ForceExecuteCommand(cPlayer * a_Player, const AString & a_Command)
|
||||||
{
|
{
|
||||||
return HandleCommand(a_Player, a_Command, false);
|
return (HandleCommand(a_Player, a_Command, false) == crExecuted);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -58,6 +58,13 @@ public: // tolua_export
|
|||||||
// Called each tick
|
// Called each tick
|
||||||
virtual void Tick(float a_Dt);
|
virtual void Tick(float a_Dt);
|
||||||
|
|
||||||
|
enum CommandResult
|
||||||
|
{
|
||||||
|
crExecuted,
|
||||||
|
crUnknownCommand,
|
||||||
|
crError,
|
||||||
|
} ;
|
||||||
|
|
||||||
// tolua_begin
|
// tolua_begin
|
||||||
enum PluginHook
|
enum PluginHook
|
||||||
{
|
{
|
||||||
@ -322,12 +329,7 @@ private:
|
|||||||
bool AddPlugin(cPlugin * a_Plugin);
|
bool AddPlugin(cPlugin * a_Plugin);
|
||||||
|
|
||||||
/** Tries to match a_Command to the internal table of commands, if a match is found, the corresponding plugin is called. Returns true if the command is executed. */
|
/** Tries to match a_Command to the internal table of commands, if a match is found, the corresponding plugin is called. Returns true if the command is executed. */
|
||||||
bool HandleCommand(cPlayer * a_Player, const AString & a_Command, bool a_ShouldCheckPermissions, bool & a_WasCommandForbidden);
|
cPluginManager::CommandResult HandleCommand(cPlayer * a_Player, const AString & a_Command, bool a_ShouldCheckPermissions);
|
||||||
bool HandleCommand(cPlayer * a_Player, const AString & a_Command, bool a_ShouldCheckPermissions)
|
|
||||||
{
|
|
||||||
bool DummyBoolean = false;
|
|
||||||
return HandleCommand(a_Player, a_Command, a_ShouldCheckPermissions, DummyBoolean);
|
|
||||||
}
|
|
||||||
} ; // tolua_export
|
} ; // tolua_export
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user