Пример #1
0
static cell_t KickClient(IPluginContext *pContext, const cell_t *params)
{
	int client = params[1];

	IGamePlayer *pPlayer = playerhelpers->GetGamePlayer(client);
	if (!pPlayer)
	{
		return pContext->ThrowNativeError("Client index %d is invalid", client);
	}
	else if (!pPlayer->IsConnected())
	{
		return pContext->ThrowNativeError("Client %d is not connected", client);
	}

	/* Ignore duplicate kicks */
	if (pPlayer->IsInKickQueue())
	{
		return 1;
	}

	g_pSM->SetGlobalTarget(client);

	char buffer[256];
	{
		DetectExceptions eh(pContext);
		g_pSM->FormatString(buffer, sizeof(buffer), pContext, params, 2);
		if (eh.HasException())
			return 0;
	}

	gamehelpers->AddDelayedKick(client, pPlayer->GetUserId(), buffer);

	return 1;
}
Пример #2
0
static cell_t IsClientInKickQueue(IPluginContext *pContext, const cell_t *params)
{
    int client = params[1];

    IGamePlayer *pPlayer = playerhelpers->GetGamePlayer(client);

    if (!pPlayer)
    {
        return pContext->ThrowNativeError("Client index %d is invalid", client);
    }
    else if (!pPlayer->IsConnected())
    {
        return pContext->ThrowNativeError("Client %d is not in game", client);
    }

    return pPlayer->IsInKickQueue() ? 1 : 0;
}
Пример #3
0
static cell_t KickClient(IPluginContext *pContext, const cell_t *params)
{
    int client = params[1];

    IGamePlayer *pPlayer = playerhelpers->GetGamePlayer(client);
    if (!pPlayer)
    {
        return pContext->ThrowNativeError("Client index %d is invalid", client);
    }
    else if (!pPlayer->IsConnected())
    {
        return pContext->ThrowNativeError("Client %d is not connected", client);
    }

    /* Ignore duplicate kicks */
    if (pPlayer->IsInKickQueue())
    {
        return 1;
    }

    g_pSM->SetGlobalTarget(client);

    char buffer[256];
    {
        DetectExceptions eh(pContext);
        g_pSM->FormatString(buffer, sizeof(buffer), pContext, params, 2);
        if (eh.HasException())
            return 0;
    }

    if (pPlayer->IsFakeClient())
    {
        // Kick uses the kickid command for bots. It is already delayed
        // until the next frame unless someone flushes command buffer
        pPlayer->Kick(buffer);
        return 1;
    }

    gamehelpers->AddDelayedKick(client, pPlayer->GetUserId(), buffer);

    return 1;
}