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

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

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

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

Maksim_navas

Ученик
Всем привет! Хочу рассказать/показать урок, как сделать /ban по дням, часам и минутам! Надеюсь такого не было и вам понравится. Итак, начнём!

Для начала добавим к define
PHP:
#define W                               "{FFFFFF}"
#define DIALOGUNBAN 899 // id дилога для высвечивания даты
Затем добавим к public OnPlayerConnect
PHP:
GetBan(playerid);
Далее идём в конец мода и пишем: ( Это диалоговое окно! Оно будет писать на сколько вы забанены, кем забанены и т.п. )

PHP:
stock GetBan(playerid)
{
       new PlayerNick[MAX_PLAYER_NAME],string[255];
       GetPlayerName(playerid, PlayerNick, MAX_PLAYER_NAME);
       format(string, sizeof(string), "banlist/%s.ini", PlayerNick);
       if(fexist(string))
	{
        new OpenBan = ini_openFile(string);
		new bantime, unbantime, PlayerBan[MAX_PLAYER_NAME], reason[128];
		ini_getInteger(OpenBan, "BanTime", bantime);
		ini_getInteger(OpenBan, "UnBanTime", unbantime);
		ini_getString(OpenBan, "PlayerBan", PlayerBan);
		ini_getString(OpenBan, "Reason", reason);
        ini_closeFile(OpenBan);
		if(gettime() >= unbantime) return UnBan(PlayerNick);
		else
		{
			format(string, sizeof(string), "\
				"W"Дата бана: %s\n\
				Дата Разбана: %s\n\
				Забанил: %s\n\
				Причина бана: %s\n\
				",
			date("%dd.%mm.%yyyy в %hh:%ii:%ss",bantime),
			date("%dd.%mm.%yyyy в %hh:%ii:%ss",unbantime),
			PlayerBan,reason);
			ShowPlayerDialog(playerid,DIALOGUNBAN,0,"{ffcf00}Вы забанены",string,"Выйти","");
			KickWithMessage(playerid);
			return true;
		}
	}
	 return true;
}
Далее, после этого stock пишем другой: ( Этот stock записывает забаненных в папку, а точнее в блокнот )

PHP:
stock UnBan(playerid[])
{
	new string[64];
	format(string, sizeof(string), "banlist/%s.ini", playerid); // меняем на своё
	return fremove(string);
}
Далее ещё один stock ( Этот stock будет отвечать за показание часов/минут/дней, сколько вам сидеть в бане )

PHP:
stock AddBan(player, playerid[], giveplayerid[], type = 1, chislo = 0, reason[])
{
	new totalban = 0;
	switch(type)
	{
	case 1: totalban = 60*chislo; // минуты
	case 2: totalban = 3600*chislo; // часы
	case 3: totalban = 86400*chislo; // сутки
	default: totalban = chislo; // секунды
	}
	new string[64];
	format(string, sizeof(string), "banlist/%s.ini", playerid); // на своё
	new OpenBan = ini_createFile(string);
	if(OpenBan < 0) ini_openFile(string);
	ini_setInteger(OpenBan, "BanTime", gettime());
	ini_setInteger(OpenBan, "UnBanTime", gettime()+totalban);
	ini_setString(OpenBan, "PlayerBan", giveplayerid);
	ini_setString(OpenBan, "Reason", reason);
	ini_closeFile(OpenBan); // Закрываем файл.
	ShowPlayerDialog(player,DIALOGUNBAN,0,"{ffcf00}Вы забанены",""W"Вы забанены","Выйти","");
}
Всё! Теперь приступаем к команде!

1) Бан по дням:

PHP:
if(strcmp(cmd, "/ban", true) == 0){ // команду на своё
		tmp = strtok(cmdtext, idx);
		if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_GRAD2, "Используйте: /ban [ID] [кол-во. дней] [причина]");
		giveplayerid = strval(tmp);
		tmp = strtok(cmdtext, idx);
		if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_GRAD2, "Используйте: /ban [ID] [кол-во. дней] [причина]");
		new chislo = strval(tmp);
		if(PlayerInfo[playerid][pAAAdmin] >= 3){
			if(giveplayerid != INVALID_PLAYER_ID){
				new length = strlen(cmdtext);
				while ((idx < length) && (cmdtext[idx] <= ' ')) idx++;
				new offset = idx;
				new result[64];
				while ((idx < length) && ((idx - offset) < (sizeof(result) - 1))){result[idx - offset] = cmdtext[idx];idx++;}
				result[idx - offset] = EOS;
				if(!strlen(result)) return SendClientMessage(playerid, COLOR_GRAD2, "Используйте: /ban [ID] [кол-во. дней] [причина]");
				new PlayerNick[MAX_PLAYER_NAME], PlayerBan[MAX_PLAYER_NAME];
				GetPlayerName(playerid, PlayerNick, MAX_PLAYER_NAME);
				GetPlayerName(giveplayerid, PlayerBan, MAX_PLAYER_NAME);
				format(string, sizeof(string), "Администратор %s заблокировал(а) игрока %s на %d дней.Причина:{65FA2F} %s", PlayerNick, PlayerBan, chislo, result); // текст на своё
				SendClientMessageToAll(0xCC00FFAA,string);
				AddBan(giveplayerid, PlayerBan, PlayerNick, 3, chislo, result); // цифра 1 отвечает за то на сколько бан если поставить 2 то будет бан на часы если поставить 3 то на дни
				KickWithMessage(giveplayerid);//Это заменить на свое
				}
				}
		return true;
	}
2) Бан по часам

PHP:
if(strcmp(cmd, "/vban", true) == 0){
		tmp = strtok(cmdtext, idx);
		if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_GRAD2, "Используйте: /vban [ID] [кол-во. часов] [причина]");
		giveplayerid = strval(tmp);
		tmp = strtok(cmdtext, idx);
		if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_GRAD2, "Используйте: /vban [ID] [кол-во. часов] [причина]");
		new chislo = strval(tmp);
		if(PlayerInfo[playerid][pAAAdmin] >= 3){
			if(giveplayerid != INVALID_PLAYER_ID){
				new length = strlen(cmdtext);
				while ((idx < length) && (cmdtext[idx] <= ' ')) idx++;
				new offset = idx;
				new result[64];
				while ((idx < length) && ((idx - offset) < (sizeof(result) - 1))){result[idx - offset] = cmdtext[idx];idx++;}
				result[idx - offset] = EOS;
				if(!strlen(result)) return SendClientMessage(playerid, COLOR_GRAD2, "Используйте: /vban [ID] [кол-во. часов] [причина]");
				new PlayerNick[MAX_PLAYER_NAME], PlayerBan[MAX_PLAYER_NAME];
				GetPlayerName(playerid, PlayerNick, MAX_PLAYER_NAME);
				GetPlayerName(giveplayerid, PlayerBan, MAX_PLAYER_NAME);
				format(string, sizeof(string), "{09FF00}Администратор %s заблокировал(а) игрока %s на %d часов.Причина:{65FA2F} %s", PlayerNick, PlayerBan, chislo, result);
				SendClientMessageToAll(0x9ACD32AA,string);
				AddBan(giveplayerid, PlayerBan, PlayerNick, 2, chislo, result);
				KickWithMessage(giveplayerid);
				}
				}
		return true;
	}
3) Бан по минутам:

PHP:
if(strcmp(cmd, "/bans", true) == 0){
		tmp = strtok(cmdtext, idx);
		if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_GRAD2, "Используйте: /bans [ID] [кол-во. минут] [причина]");
		giveplayerid = strval(tmp);
		tmp = strtok(cmdtext, idx);
		if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_GRAD2, "Используйте: /bans [ID] [кол-во. минут] [причина]");
		new chislo = strval(tmp);
		if(PlayerInfo[playerid][pAAAdmin] >= 3){
			if(giveplayerid != INVALID_PLAYER_ID){
				new length = strlen(cmdtext);
				while ((idx < length) && (cmdtext[idx] <= ' ')) idx++;
				new offset = idx;
				new result[64];
				while ((idx < length) && ((idx - offset) < (sizeof(result) - 1))){result[idx - offset] = cmdtext[idx];idx++;}
				result[idx - offset] = EOS;
				if(!strlen(result)) return SendClientMessage(playerid, COLOR_GRAD2, "Используйте: /bans [ID] [кол-во. минут] [причина]");
				new PlayerNick[MAX_PLAYER_NAME], PlayerBan[MAX_PLAYER_NAME];
				GetPlayerName(playerid, PlayerNick, MAX_PLAYER_NAME);
				GetPlayerName(giveplayerid, PlayerBan, MAX_PLAYER_NAME);
				format(string, sizeof(string), "{09FF00}Администратор %s заблокировал(а) игрока %s на %d минут.Причина:{65FA2F} %s", PlayerNick, PlayerBan, chislo, result);
				SendClientMessageToAll(0x9ACD32AA,string);
				AddBan(giveplayerid, PlayerBan, PlayerNick, 1, chislo, result);
				KickWithMessage(giveplayerid);
				}
				}
		return true;
	}
Ну вот и всё! Надеюсь урок помог) Строго не судите! Это мой 1 урок, помогал в работе Admiral_Navas я естественно и ешё кто-то
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу