Доступ к архиву

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

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

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

Система чёрного списка. [ALL]

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

Ferjkee

Компетентный
Добрый вечер.

Решил я написать свою систему чёрного списка и хочу поделиться с вами ей.

Система совсем простенькая. Что ж, начнём!

Для начала, как всегда, создаём саму систему.
Даём системе название какое хотим, я допустим прозвал её pBlacklist.

Неохото мне расписывать по отдельности как именно вставлять системы, так как множество способов для mxINI, dini и mysql, у всех по разному, тем более это все можно сделать по подобным системам в моде, да и за все это время думаю вы научились, это не так уж и сложно.
Но для новичков, думаю пояснение требуется.

Для начала добавляем в enum pInfo нашу систему:
PHP:
pBlacklist
Затем нам нужно присвоить значение к нулю при присоединении к серверу, а именно:
PHP:
PlayerInfo[playerid][pBalcklist] = false;
Ну, а далее уже как обычно, в OnPlayerLogin, OnPlayerRegister, а так же и в сохранение, то есть SavePlayer.
Если не знаете как, сделайте это по примеру других систем.

Итак, теперь в моде сама система присутствует, приступим к основному.

В начало мода для упрощения вставляем название рангов администрирования:
PHP:
new AdminRanks[6][0] = {
    {"Модератор"},
    {"Модератор"},
    {"Модератор"},
    {"Модератор"},
    {"Гл.Модератор"},
    {"Гл.Администратор"}
};
Обосную первую строку:
[6] - кол-во строк. То есть у меня 6 уровней админки, значит названий каждого ранга будет и строк будет 6, так и есть, если посчитать. Если в вашем моде больше/меньше кол-во уровней админки, меняйте на свой и указывайте название, через запятую (p.s. запятая в последней строке не нужна).

Теперь создаём команду (ZCMD+SSCANF):
PHP:
CMD:blacklist(playerid, params[])
{
	new string[128+MAX_PLAYER_NAME];
    new sendername[MAX_PLAYER_NAME];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(params[0],sendername,sizeof(sendername));
    GetPlayerName(playerid,name,sizeof(name));
	if(PlayerInfo[playerid][pAdmin] < 3) return send(playerid, -1, "Ты не можешь использовать эту команду.");
	if(sscanf(params,"i", params[0])) return send(playerid, -1, "Используй: /blacklist [ID игрока]");
	if(!IsPlayerConnected(params[0]) || params[0] == INVALID_PLAYER_ID) return send(playerid, -1, "Неверный ID игрока.");
	switch(PlayerInfo[params[0]][pBlacklist])
	{
		case 0:
		{
			f(string, "Ты был(а) добавлен(а) в общий черный список. Добавил(а): %s %s.", AdminRanks[PlayerInfo[playerid][pAdmin]], name), send(params[0], -1, string);
			f(string, "Ты добавил(а) игрока %s в общий черный список.", sendername), send(playerid, LBLUE, string);
			PlayerInfo[params[0]][pBlacklist] = 1;
		}
		case 1:
		{
			f(string, "Ты был(а) удален(а) из общего черного списка. Удалил(а): %s %s.", AdminRanks[PlayerInfo[playerid][pAdmin]], name), send(params[0], -1, string);
			f(string, "Ты удалил(а) игрока %s из общего черного списка.", sendername), send(playerid, LBLUE, string);
			PlayerInfo[params[0]][pBlacklist] = 0;
		}
	}
	return 1;
}
Если кто-то ещё пользуется обычным пабликом OnPlayerCommand, то переводите сами, сложного в этом ничего нет, а лучше переводите все команды на ZCMD + sscanf.

Поясню команду..
Если администратор более 3 уровня ввел команду /blacklist и указал ID игрока который находится НЕ в ЧС, то игрок будет занесён в ЧС. Если у игрока уже был установлен ЧС, то при вводе команды, ЧС будет присвоен нулю, то есть игрок больше не в ЧС.

Думаю понятно.

Для чего это нужно? Во первых интересно, во вторых удобно.
Допустим, игрок нарушил правила сервера и при подаче жалобы на игрока, ему можно установить ЧС и сделать какие угодно запреты для него.

Например, игрок с ЧС не сможет написать в общий чат, вступить в фракцию, стать лидером и другое. Для того чтобы это сделать, достаточно поставить проверку в нужные команды, а именно:
Допустим для общего чата, вставляем в самый верх команды:
PHP:
if(PlayerInfo[playerid][pBlacklist] > 1) return send(playerid,-1,"Ты находишься в ЧС.");
Или допустим для назначения на пост лидера. Вставляем где нибудь в верху команды:
PHP:
if(PlayerInfo[params[0]][pBlacklist] > 1) return send(playerid,-1,"Игрок находится в ЧС.");
PHP:
params[0] - ID игрока.

Расписал не очень, так как хочу спать, да и больной, голова болит. :(
Автор: Я (Ferjkee).

Удачи! ;)
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу