Kick — различия между версиями
Материал из Pro-Pawn Wiki
VVWVV (обсуждение | вклад) |
|||
(не показана одна промежуточная версия ещё одного участника) | |||
Строка 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, "Вы не администратор сервера!"); |
− | + | new targetid; | |
− | return SendClientMessage(playerid, -1, | + | 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, "Игрок не найден."); |
− | + | SetTimerEx("@_DelayedKick", 800, false, "d", playerid); | |
− | + | new string[144], pname[MAX_PLAYER_NAME + 1], tname[MAX_PLAYER_NAME + 1]; | |
− | return | + | 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
.
Баг 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);
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);
См. также: