Flime
Ученик
Здравствуйте!
В этом уроке я постараюсь объяснить вам структуру системы банов.
Думаю, что сделать получение и сохранение данных, вы сможете сами. Т.к. не в этом суть урока.
Для хранения данных, мы будем использовать стандартную переменную
После получения данных о игроке (OnPlayerLogin), мы должны его проверить на наличие бана, вот код:
Теперь сделаем команду бана (DC_CMD, sscanf)
Копирование данной статьи без разрешения автора запрещено!
В этом уроке я постараюсь объяснить вам структуру системы банов.
Думаю, что сделать получение и сохранение данных, вы сможете сами. Т.к. не в этом суть урока.
Для хранения данных, мы будем использовать стандартную переменную
PHP:
PlayerInfo[playerid][pBan]
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;
}
}
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;
}
Последнее редактирование:
