1
0
mirror of https://github.com/VCMP-SqMod/SqMod.git synced 2025-02-22 04:37:13 +01:00

Add the ability to specify a custom header/payload when kicking/banning a player.

This commit is contained in:
Sandu Liviu Catalin 2016-08-17 13:48:29 +03:00
parent 4e039d415a
commit c4e82d6756
5 changed files with 57 additions and 1 deletions

View File

@ -343,6 +343,10 @@ protected:
Int32 mTrackPositionHeader; // Header to send when triggering position callback. Int32 mTrackPositionHeader; // Header to send when triggering position callback.
Object mTrackPositionPayload; // Payload to send when triggering position callback. Object mTrackPositionPayload; // Payload to send when triggering position callback.
// ----------------------------------------------------------------------------------------
Int32 mKickBanHeader; // Header to send when triggering kick/ban callback.
Object mKickBanPayload; // Payload to send when triggering kick/ban callback.
// ---------------------------------------------------------------------------------------- // ----------------------------------------------------------------------------------------
Int32 mLastWeapon; // Last known weapon of the player entity. Int32 mLastWeapon; // Last known weapon of the player entity.
Float32 mLastHealth; // Last known health of the player entity. Float32 mLastHealth; // Last known health of the player entity.

View File

@ -94,6 +94,8 @@ void Core::ResetInst(PlayerInst & inst)
inst.mTrackHeading = 0; inst.mTrackHeading = 0;
inst.mTrackPositionHeader = 0; inst.mTrackPositionHeader = 0;
inst.mTrackPositionPayload.Release(); inst.mTrackPositionPayload.Release();
inst.mKickBanHeader = 0;
inst.mKickBanPayload.Release();
inst.mLastWeapon = -1; inst.mLastWeapon = -1;
inst.mLastHealth = 0.0; inst.mLastHealth = 0.0;
inst.mLastArmour = 0.0; inst.mLastArmour = 0.0;

View File

@ -255,6 +255,21 @@ void CPlayer::Kick() const
{ {
// Validate the managed identifier // Validate the managed identifier
Validate(); Validate();
// Store the default header and payload
Core::Get().GetPlayer(m_ID).mKickBanHeader = 0;
Core::Get().GetPlayer(m_ID).mKickBanPayload = NullObject();
// Perform the requested operation
_Func->KickPlayer(m_ID);
}
// ------------------------------------------------------------------------------------------------
void CPlayer::KickBecause(Int32 header, Object & payload) const
{
// Validate the managed identifier
Validate();
// Store the specified header and payload
Core::Get().GetPlayer(m_ID).mKickBanHeader = header;
Core::Get().GetPlayer(m_ID).mKickBanPayload = payload;
// Perform the requested operation // Perform the requested operation
_Func->KickPlayer(m_ID); _Func->KickPlayer(m_ID);
} }
@ -264,6 +279,21 @@ void CPlayer::Ban() const
{ {
// Validate the managed identifier // Validate the managed identifier
Validate(); Validate();
// Store the default header and payload
Core::Get().GetPlayer(m_ID).mKickBanHeader = 0;
Core::Get().GetPlayer(m_ID).mKickBanPayload = NullObject();
// Perform the requested operation
_Func->BanPlayer(m_ID);
}
// ------------------------------------------------------------------------------------------------
void CPlayer::BanBecause(Int32 header, Object & payload) const
{
// Validate the managed identifier
Validate();
// Store the specified header and payload
Core::Get().GetPlayer(m_ID).mKickBanHeader = header;
Core::Get().GetPlayer(m_ID).mKickBanPayload = payload;
// Perform the requested operation // Perform the requested operation
_Func->BanPlayer(m_ID); _Func->BanPlayer(m_ID);
} }
@ -2289,6 +2319,8 @@ void Register_CPlayer(HSQUIRRELVM vm)
.Func(_SC("StreamedFor"), &CPlayer::IsStreamedFor) .Func(_SC("StreamedFor"), &CPlayer::IsStreamedFor)
.Func(_SC("Kick"), &CPlayer::Kick) .Func(_SC("Kick"), &CPlayer::Kick)
.Func(_SC("Ban"), &CPlayer::Ban) .Func(_SC("Ban"), &CPlayer::Ban)
.Func(_SC("KickBecause"), &CPlayer::KickBecause)
.Func(_SC("BanBecause"), &CPlayer::BanBecause)
.Func(_SC("GetOption"), &CPlayer::GetOption) .Func(_SC("GetOption"), &CPlayer::GetOption)
.Func(_SC("SetOption"), &CPlayer::SetOption) .Func(_SC("SetOption"), &CPlayer::SetOption)
.Func(_SC("SetOptionEx"), &CPlayer::SetOptionEx) .Func(_SC("SetOptionEx"), &CPlayer::SetOptionEx)

View File

@ -270,11 +270,21 @@ public:
*/ */
void Kick() const; void Kick() const;
/* --------------------------------------------------------------------------------------------
* Kick the managed player entity from the server.
*/
void KickBecause(Int32 header, Object & payload) const;
/* -------------------------------------------------------------------------------------------- /* --------------------------------------------------------------------------------------------
* Ban the managed player entity from the server. * Ban the managed player entity from the server.
*/ */
void Ban() const; void Ban() const;
/* --------------------------------------------------------------------------------------------
* Ban the managed player entity from the server.
*/
void BanBecause(Int32 header, Object & payload) const;
/* -------------------------------------------------------------------------------------------- /* --------------------------------------------------------------------------------------------
* Retrieve the key of the managed player entity. * Retrieve the key of the managed player entity.
*/ */

View File

@ -256,9 +256,17 @@ static void OnPlayerDisconnect(int32_t player_id, vcmpDisconnectReason reason)
{ {
// Attempt to forward the event // Attempt to forward the event
try try
{
if (reason == vcmpDisconnectReasonKick)
{
Core::Get().DisconnectPlayer(player_id, Core::Get().GetPlayer(player_id).mKickBanHeader,
Core::Get().GetPlayer(player_id).mKickBanPayload);
}
else
{ {
Core::Get().DisconnectPlayer(player_id, reason, NullObject()); Core::Get().DisconnectPlayer(player_id, reason, NullObject());
} }
}
SQMOD_CATCH_EVENT_EXCEPTION(OnPlayerDisconnect) SQMOD_CATCH_EVENT_EXCEPTION(OnPlayerDisconnect)
// See if a reload was requested // See if a reload was requested
SQMOD_RELOAD_CHECK(g_Reload) SQMOD_RELOAD_CHECK(g_Reload)