1
0
mirror of https://github.com/VCMP-SqMod/SqMod.git synced 2024-11-08 08:47:17 +01:00

Use entity instance when sending the invoker to commands.

This commit is contained in:
Sandu Liviu Catalin 2015-11-08 23:52:56 +02:00
parent 8a01a1b0ed
commit 6f89d0b8d1
2 changed files with 37 additions and 14 deletions

View File

@ -1,7 +1,6 @@
#include "Command.hpp" #include "Command.hpp"
#include "Register.hpp" #include "Register.hpp"
#include "Core.hpp" #include "Core.hpp"
#include "Entity.hpp"
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
#include <cstdlib> #include <cstdlib>
@ -91,7 +90,13 @@ void CmdManager::SetOnAuth(Function & func)
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
SQInt32 CmdManager::GetInvokerID() const CPlayer & CmdManager::GetInvoker() const
{
return m_Invoker;
}
// ------------------------------------------------------------------------------------------------
SQInt32 CmdManager::GetInvokerID() const
{ {
return m_Invoker; return m_Invoker;
} }
@ -112,7 +117,7 @@ const SQChar * CmdManager::GetText()
void CmdManager::Execute(SQInt32 invoker, const String & str) void CmdManager::Execute(SQInt32 invoker, const String & str)
{ {
// Save the invoker identifier // Save the invoker identifier
m_Invoker = invoker; m_Invoker.SetID(invoker);
// Find where the command name ends // Find where the command name ends
String::size_type split_pos = str.find_first_of(' '); String::size_type split_pos = str.find_first_of(' ');
// Attempt to separate the command name from arguments // Attempt to separate the command name from arguments
@ -149,7 +154,7 @@ void CmdManager::Execute(SQInt32 invoker, const String & str)
void CmdManager::Exec(CmdListener & cmd) void CmdManager::Exec(CmdListener & cmd)
{ {
// See if the invoker has enough authority to execute this command // See if the invoker has enough authority to execute this command
if (!cmd.AuthCheckID(m_Invoker)) if (!cmd.AuthCheck(m_Invoker))
{ {
Error(CMDERR_INSUFFICIENT_AUTH, _SC("Insufficient authority to execute command")); Error(CMDERR_INSUFFICIENT_AUTH, _SC("Insufficient authority to execute command"));
// Command failed // Command failed
@ -991,6 +996,12 @@ bool CmdListener::ArgCheck(SQUint32 arg, Uint8 mask) const
return false; return false;
} }
// ------------------------------------------------------------------------------------------------
bool CmdListener::AuthCheck(Reference< CPlayer > & player)
{
return AuthCheckID(player);
}
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
bool CmdListener::AuthCheckID(SQInt32 id) bool CmdListener::AuthCheckID(SQInt32 id)
{ {
@ -1018,14 +1029,14 @@ bool CmdListener::AuthCheckID(SQInt32 id)
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
bool CmdListener::Execute(SQInt32 invoker, Array & args) bool CmdListener::Execute(CPlayer & invoker, Array & args)
{ {
bool result = false; bool result = false;
// Was there an executer specified? // Was there an executer specified?
if (!m_OnExec.IsNull()) if (!m_OnExec.IsNull())
{ {
// Attempt to evaluate the specified executer // Attempt to evaluate the specified executer
SharedPtr< bool > ret = m_OnExec.Evaluate< bool, SQInt32, Array & >(invoker, args); SharedPtr< bool > ret = m_OnExec.Evaluate< bool, CPlayer &, Array & >(invoker, args);
// See if the executer succeeded or default to failed // See if the executer succeeded or default to failed
result = !ret ? false : *ret; result = !ret ? false : *ret;
} }
@ -1163,15 +1174,15 @@ static void Cmd_SetOnAuth(Function & func)
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
static SQInt32 Cmd_GetInvokerID() static const CPlayer & Cmd_GetInvoker()
{ {
return _Cmd->GetInvokerID(); return _Cmd->GetInvoker();
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
static Reference< CPlayer > Cmd_GetInvoker() static SQInt32 Cmd_GetInvokerID()
{ {
return Reference< CPlayer >(_Cmd->GetInvokerID()); return _Cmd->GetInvokerID();
} }
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
@ -1229,7 +1240,8 @@ bool Register_Cmd(HSQUIRRELVM vm)
.Func(_SC("set_on_auth"), &CmdListener::SetOnAuth_Env) .Func(_SC("set_on_auth"), &CmdListener::SetOnAuth_Env)
.Func(_SC("generate_info"), &CmdListener::GenerateInfo) .Func(_SC("generate_info"), &CmdListener::GenerateInfo)
.Func(_SC("arg_check"), &CmdListener::ArgCheck) .Func(_SC("arg_check"), &CmdListener::ArgCheck)
.Func(_SC("auth_check"), &CmdListener::AuthCheckID) .Func(_SC("auth_check"), &CmdListener::AuthCheck)
.Func(_SC("auth_check_id"), &CmdListener::AuthCheckID)
); );
// Output debugging information // Output debugging information

View File

@ -3,6 +3,7 @@
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
#include "Common.hpp" #include "Common.hpp"
#include "Entity/Player.hpp"
// ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------
#include <unordered_map> #include <unordered_map>
@ -179,7 +180,12 @@ public:
/* -------------------------------------------------------------------------------------------- /* --------------------------------------------------------------------------------------------
* Retrieve the default authority inspector. * Retrieve the default authority inspector.
*/ */
SQInt32 GetInvokerID(); const CPlayer & GetInvoker() const;
/* --------------------------------------------------------------------------------------------
* Retrieve the default authority inspector.
*/
SQInt32 GetInvokerID() const;
/* -------------------------------------------------------------------------------------------- /* --------------------------------------------------------------------------------------------
* Retrieve the name of the currently executed command. * Retrieve the name of the currently executed command.
@ -230,7 +236,7 @@ private:
/* -------------------------------------------------------------------------------------------- /* --------------------------------------------------------------------------------------------
* Currently and last command invoker. * Currently and last command invoker.
*/ */
SQInt32 m_Invoker; CPlayer m_Invoker;
/* -------------------------------------------------------------------------------------------- /* --------------------------------------------------------------------------------------------
* Currently and last used command name. * Currently and last used command name.
@ -517,6 +523,11 @@ public:
*/ */
bool ArgCheck(SQUint32 arg, Uint8 mask) const; bool ArgCheck(SQUint32 arg, Uint8 mask) const;
/* --------------------------------------------------------------------------------------------
* Check whether the specified player is allowed to execute this command.
*/
bool AuthCheck(Reference< CPlayer > & player);
/* -------------------------------------------------------------------------------------------- /* --------------------------------------------------------------------------------------------
* Check whether the specified player is allowed to execute this command. * Check whether the specified player is allowed to execute this command.
*/ */
@ -525,7 +536,7 @@ public:
/* -------------------------------------------------------------------------------------------- /* --------------------------------------------------------------------------------------------
* Attempt to execute this command. * Attempt to execute this command.
*/ */
bool Execute(SQInt32 invoker, Array & args); bool Execute(CPlayer & invoker, Array & args);
protected: protected: