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:
parent
8a01a1b0ed
commit
6f89d0b8d1
@ -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
|
||||||
|
@ -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:
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user