PDA

Просмотр полной версии : [CMD] /timeban (dc_cmd / zcmd) + sscanf



L0ndl3m
29.04.2014, 22:07
Команда блокирует IP-адрес игрока на время указанное в параметрах.

Примечание:
Если сервер завершит свою работу, все забаненные IP-адреса очистятся.

Параметры:

targetid - ID игрока
type - тип времени блокировки [0 - секунды, 1 - минуты, 2 - часы, 3 - дни]
time - время бана
reason - причина бана


Всего типов бана: 4 (можно было добавить и больше но pawn не позволяет использовать огромные числа).



CMD:timeban(playerid, params[])
{
new
targetid,
b_type,
b_time,
b_reason[30]
;
if(sscanf(params, "udds[30]", targetid, b_type, b_time, b_reason))
return SendClientMessage(playerid, -1, "Используйте: /timeban [targetid] [type (0 - seconds | 1 - minutes | 2 - hours | 3 - days] [time] [reason]");
if(IsPlayerConnected(targetid) == 0)
return SendClientMessage(playerid, -1, "Такого игрока нет на сервере.");
if(!(0 <= b_type <= 3))
return SendClientMessage(playerid, -1, "Тип времени бана от 0 и до 3.");

static const
fmt_str[] = "Игрок %s (%d) был забанен администрацией на кол-во %s: %d, по причине: %s",
b_type_names[][] = {"секунд", "минут", "часов", "дней"},
b_type_times[] = {1, 60, 3600, 86400}
;
new
str[sizeof(fmt_str) - 2 + MAX_PLAYER_NAME - 2 + 3 - 2 + 6 - 2 + 12 - 2 + 30],
t_id_Ip[16]
;
GetPlayerIp(targetid, t_id_Ip, 16);
GetPlayerName(targetid, str, MAX_PLAYER_NAME);

format(str, sizeof(str), fmt_str, str, targetid, b_type_names[b_type], b_time, b_reason);
SendClientMessageToAll(-1, str);

b_time *= b_type_times[b_type] * 1000;

Kick(targetid);

return BlockIpAddress(t_id_Ip, b_time);
}



Автор: Londlem (http://pro-pawn.ru/member.php?2057-Londlem)

Специально для: Pro-Pawn.Ru (http://pro-pawn.ru)

Копирование данной статьи без разрешения автора запрещено!

Exclusive
01.05.2014, 10:06
Божественно.:blush2:

ߣΘnÐγ*
02.05.2014, 19:28
Не плохо, можно сделать бан на часы :D Интересно :)

DeimoS
05.05.2014, 21:09
А разве после первого же перезапуска сервера не слетят все баны?) Информация из BlockIpAddress хранится в памяти сервера же. И если хотите использовать данную функцию, придётся сохранять IP с временем в БД/файлах и в OngameModeInit подгружать

L0ndl3m
05.05.2014, 21:15
А разве после первого же перезапуска сервера не слетят все баны?) Информация из BlockIpAddress хранится в памяти сервера же. И если хотите использовать данную функцию, придётся сохранять IP с временем в БД/файлах и в OngameModeInit подгружать



Примечание:
Если сервер завершит свою работу, все забаненные IP-адреса очистятся.

Не?

DeimoS
05.05.2014, 21:17
Не?

Слепой :с Но , думаю, мой пост всё равно кому-нибудь, да пригодиться. Систему написать довольно просто. Только вот вставлять всё лучше в main, а не в OnGameModeInit

Gressie
05.05.2014, 22:28
А где проверка? На то что IP забанен?

vitalik6243
05.05.2014, 22:59
Вполне интересно.
Но согласен с постами выше что слетит бан если сервер рестартанется. С такими темпами бан лучше делать максимум на 20 часов.

L0ndl3m
05.05.2014, 23:08
А где проверка? На то что IP забанен?

IP-адрес ID`а игрока, которого указали в параметрах блокируется на определённое время, то есть, если время блокировки не вышло, то следовательно IP не разблокируется и игрок не сможет зайти на сервер и получит сообщение: You are banned from this server.

SkyLaGer
09.05.2014, 18:06
Примечание:
Если сервер завершит свою работу, все забаненные IP-адреса очистятся.

Если будет
SendRconCommand("gmx"); то все равно слетят?

P.S. Посты выше читал.. все равно не понял толком...

Nikoo007
09.05.2014, 18:39
Если будет
SendRconCommand("gmx"); то все равно слетят?

P.S. Посты выше читал.. все равно не понял толком...
Писали же уже выше...
Если сервер перезагрузится/выключится - все забаненные IP-адреса очистятся.

DeimoS
10.05.2014, 08:43
Если будет
SendRconCommand("gmx"); то все равно слетят?

P.S. Посты выше читал.. все равно не понял толком...

Nope. Слёт происходит только если серверный процесс отключится. При рестарте мода слетать ничего не должно.