Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Мануал Пишем простейшую систему банов [new.pwn]

Статус
В этой теме нельзя размещать новые ответы.

Flime

Ученик
Здравствуйте!

В этом уроке я постараюсь объяснить вам структуру системы банов.

Думаю, что сделать получение и сохранение данных, вы сможете сами. Т.к. не в этом суть урока.
Для хранения данных, мы будем использовать стандартную переменную
PHP:
PlayerInfo[playerid][pBan]
После получения данных о игроке (OnPlayerLogin), мы должны его проверить на наличие бана, вот код:
PHP:
if(PlayerInfo[playerid][pBan] > 0)
{
	if(PlayerInfo[playerid][pBan] > gettime())
	{
		new UBDay = floatround((gettime()-PlayerInfo[playerid][pBan])/86400);
		new UBHour = floatround((gettime()-(UBDay*86400))/3600);
		new UBMin = floatround((gettime()-(UBHour*3600))/60);
		static const fmt_string[] = "Ваш аккаунт заблокирован на сервере! До разбана: %d (дн) %d (ч) %d (мин)!";
		new string[sizeof(fmt_string)-2+MAX_PLAYER_NAME-2+11-2+2-2+2-2+2];
		format(string, sizeof(string), fmt_string, UBDay, UBHour, UBMin);
		SendClientMessage(playerid, 0xFFFFFFFF, string);
		Kick(playerid);
		return 1;
	}
	else
	{
		SendClientMessage(playerid, 0xFF0000FF, "Вы разбанены на сервере. Больше не нарушайте правила сервера!");
		PlayerInfo[playerid][pBan] = 0;
	}
}
Теперь сделаем команду бана (DC_CMD, sscanf)

PHP:
CMD:ban(playerid,params[])
{
    //Суда нужно вставить проверку на админ. права
	if(sscanf(params,"uds[24]",params[0],params[1],params[2])) return SendClientMessage(playerid, 0xAFAFAFAA, "/ban [id/ник игрока] [Число дней] [Причина]");
	if(!IsPlayerConnected(params[0])) return SendClientMessage(playerid, 0xAFAFAFAA, "Введеный вами ID не найден на сервере");
	if(params[1] < 5 || params[1] > 15) return SendClientMessage(playerid, 0xAFAFAFAA, "От 5 до 15 дней!");
	if(strlen(params[2]) < 2 || strlen(params[2]) > 24) return  SendClientMessage(playerid, 0xAFAFAFAA, "Точно и кратко сформулируйте причину от 2 до 24 символов");
    new player_name[MAX_PLAYER_NAME+1],target_name[MAX_PLAYER_NAME+1];
    GetPlayerName(playerid, player_name, sizeof(player_name));
    GetPlayerName(params[0], target_name, sizeof(target_name));
    static const fmt_string[] = "Администратор %s забанил %s на %d дней. Причина: %s";
    new string[sizeof(fmt_string)+MAX_PLAYER_NAME-2+MAX_PLAYER_NAME-2+2-2+24-2];
	format(string, sizeof(string), fmt_string, player_name,target_name,params[1],params[2]);
    SendClientMessageToAll(0xFF6347AA, string);
    PlayerInfo[params[0]][pBan] = params[1]*86400+gettime();
    Kick(params[0]);
	return 1;
}
Копирование данной статьи без разрешения автора запрещено!
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу