Kick — различия между версиями

Материал из Pro-Pawn Wiki
Перейти к: навигация, поиск
 
Строка 5: Строка 5:
 
{{Param
 
{{Param
 
| playerid
 
| playerid
| ID игрока, для которого нужно закрыть соединение.
+
| ID игрока, для которого требуется закрыть соединение.
 
}}
 
}}
 
{{Returns
 
{{Returns
 
| Всегда возвращает <code>1</code>.
 
| Всегда возвращает <code>1</code>.
 
}}
 
}}
{{NoteSAMPCloseConnectionBug|Kick}}
+
{{NoteSAMPBug
 +
| {{NoteSAMPCloseConnectionBug|Kick}}
 +
}}
 
{{Example}}
 
{{Example}}
 
<pawn>
 
<pawn>
 +
const COLOR_RED = 0xFF604000;
 +
 
CMD:kick(playerid, params[])
 
CMD:kick(playerid, params[])
 
{
 
{
 
if (0 == IsPlayerAdmin(playerid))
 
if (0 == IsPlayerAdmin(playerid))
return SendClientMessage(playerid, -1, !"Вы не администратор сервера!");
+
return SendClientMessage(playerid, -1, "Вы не администратор сервера!");
extract params -> new player:targetid; else // sscanf2
+
new targetid;
return SendClientMessage(playerid, -1, !"Использование: /kick [ID игрока/часть ника]");
+
if (sscanf(params, "us", targetid, params))
 +
return SendClientMessage(playerid, -1, "Использование: /kick [ID игрока/часть ника] [причина]");
 
if (targetid == INVALID_PLAYER_ID)
 
if (targetid == INVALID_PLAYER_ID)
return SendClientMessage(playerid, -1, !"Игрок не найден.");
+
return SendClientMessage(playerid, -1, "Игрок не найден.");
SendClientMessage(targetid, -1, !"Соединение было закрыто администратором.");
+
SetTimerEx("@_DelayedKick", 800, false, "d", playerid);
SetTimerEx(!"@_DelayedKick", 800, false, !"d", playerid);
+
new string[144], pname[MAX_PLAYER_NAME + 1], tname[MAX_PLAYER_NAME + 1];
return SendClientMessage(playerid, -1, !"Соединение игрока было успешно закрыто.");
+
GetPlayerName(playerid, pname, sizeof(pname));
 +
GetPlayerName(playerid, tname, sizeof(tname));
 +
format(string, sizeof(string), "Вы были кикнуты администратором %s, причина: %s", pname, params);
 +
SendClientMessage(targetid, COLOR_RED, string);
 +
format(string, sizeof(string), "Администратор %s кикнул игрока %s, причина: %s", pname, tname, params);
 +
return SendClientMessageToAll(COLOR_RED, string);
 
}
 
}
  
Строка 30: Строка 40:
 
return Kick(playerid);
 
return Kick(playerid);
 
</pawn>
 
</pawn>
 +
{{SeeAlso}}
 +
* [[Ban]]
 +
* [[BanEx]]
 
[[Категория:Функции SA-MP]]
 
[[Категория:Функции SA-MP]]

Текущая версия на 16:38, 8 августа 2018

Описание:

Закрывает соединение между сервером и клиентом (игроком).

Параметры:

(playerid)
playerid ID игрока, для которого требуется закрыть соединение.


Возвращаемое значение:

Всегда возвращает 1.

Bug.png
Баг SA-MP
Если незадолго до закрытия соединения с игроком были совершены какие-либо действия (например, отправка сообщений с помощью SendClientMessage()), эффект от этих действий не будет виден на стороне игрока. Для обхода этой проблемы можно создать таймер с задержкой в 200-1000 миллисекунд и из него вызывать функцию Kick(), либо использовать уже готовое решение, например, dc_kickfix.inc или u_kickfix.inc.


Пример использования:

const COLOR_RED = 0xFF604000;

CMD:kick(playerid, params[])
{
    if (0 == IsPlayerAdmin(playerid))
        return SendClientMessage(playerid, -1, "Вы не администратор сервера!");
    new targetid;
    if (sscanf(params, "us", targetid, params))
        return SendClientMessage(playerid, -1, "Использование: /kick [ID игрока/часть ника] [причина]");
    if (targetid == INVALID_PLAYER_ID)
        return SendClientMessage(playerid, -1, "Игрок не найден.");
    SetTimerEx("@_DelayedKick", 800, false, "d", playerid);
    new string[144], pname[MAX_PLAYER_NAME + 1], tname[MAX_PLAYER_NAME + 1];
    GetPlayerName(playerid, pname, sizeof(pname));
    GetPlayerName(playerid, tname, sizeof(tname));
    format(string, sizeof(string), "Вы были кикнуты администратором %s, причина: %s", pname, params);
    SendClientMessage(targetid, COLOR_RED, string);
    format(string, sizeof(string), "Администратор %s кикнул игрока %s, причина: %s", pname, tname, params);
    return SendClientMessageToAll(COLOR_RED, string);
}

@_DelayedKick(playerid);
@_DelayedKick(playerid)
    return Kick(playerid);


См. также: