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

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

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

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

/ban

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

Maksim_navas

Ученик
Всем привет! Сегодня я бы хотел поделиться /ban на MySQL. Итак, начнём:
PHP:
  if (!strcmp(cmd, "/ban", true))
    {
    if(PlayerInfo[playerid][playerAdminka] < 5) return 1; // playerAdminka на своё. 5 - с какого lvl админки можно банить
    tmp = strcharsplit(cmdtext, idx);
    if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "Подсказка: /ban [id/Nick] [дни] [причина]");
    giveplayerid = ReturnUser(tmp);
    tmp = strcharsplit(cmdtext, idx);
    if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_WHITE, "Подсказка: /ban [id/Nick] [дни] [причина]");
    if(PlayerInfo[playerid][playerAdminka] < PlayerInfo[playerid][playerAdminka]) //
    {
	SendClientMessage(playerid,COLOR_GREY,"Банить администрацию, которая стоит выше вас запрещено!"); // проверка на администрацию, т.е. если вы 5 lvl, то 6.... вы забанить не сможете
	return 1;
    }
    new string[64]; // Если удалили анти-рекламу, то и это удаляйте, т.к. она будет не использоваться
    new chislo = strval(tmp);
    new length = strlen(cmdtext);  // назначаем переменные
    new stringr[64]; 
    new stringer2[128];
    while ((idx < length) && (cmdtext[idx] <= ' '))
    {
    idx++;
    }
    new offset = idx;
    new result[64];
 	while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
  	{
	  /* Моя сис-ма анти-рекламы в причине, если не надо, удаляйте, если надо, то убирайте  /* и */
    		 new count;
     	     for(new i; i < strlen(result); i++)
               	{
                    if(result[i] >= '0' && result[i] <= '9') // проверка на цифры
                    {
                        count++;
                        if(count == 6) // макс цифр. в причине
                        {
                   	 format(stringer, sizeof(stringer), "Администратор: %s[%d], был снят сервером: Реклама", PlayerInfo[playerid][pNames],playerid);
                       	SendClientMessageToAll(COLOR_LIGHTRED,string); // пишем всем
                       	PlayerInfo[playerid][playerAdminka] = 0; // снимаем админку
	                return true;
                         }
		   }
  	    }
  		*/
  		result[idx - offset] = cmdtext[idx];
    	        idx++;
	    }
	    result[idx - offset] = EOS;
      	    if(!strlen(result)) return SendClientMessage(playerid, COLOR_WHITE, "Подсказка: /ban [id/часть ника] [дни] [причина]");
	    format(tmp, sizeof(tmp), "{FF00CC}Администратор: %s[%d] заблокировал(а) %s на %d дней(ня). Причина: %s{FFFFFF}", PlayerInfo[playerid][pNames],playerid,PlayerInfo[giveplayerid][pNames], chislo, (result));
	    SendClientMessageToAll(COLOR_LIGHTRED,tmp); // Пишем всем
	    format(stringr, sizeof(stringr), "%s",(result));
            format(stringer2, sizeof(stringer2), "{FFCC33}Заблокировал: {CCFF00}%s\n{FFCC33}Ваш Ник: {CCFF00}%s\n{FFCC33}Срок: %d Дней(Дня)\n{FFCC33}Причина: {CCFF00}%s", PlayerInfo[playerid][pNames], PlayerInfo[giveplayerid][pNames], chislo, (result)); // это в одну строчку, т.к. не влезло
      	    ShowPlayerDialog(giveplayerid,13, DIALOG_STYLE_MSGBOX, "Ваш аккаунт заблокирован", stringer2, "ENTER", "OK"); // ShowPlayerDialog назначаем диалога, giveplayerid - выдаём, 13 - id диалога, DIALOG_STYLE_MSGBOX - вид диалога
	    new ip[56];
	    antiwarn[playerid] += 8;
	    new curdate = getdate(year,month,day);
	    if(antiwarn[playerid] >= 30 && anti[playerid] == 0) anti[playerid] = 1, antiwarn[playerid] = 300;
	    getdate(year, month, day);
	    AntiBan[playerid] += 30;
   	    gettime(hour,minuite,second);
     	    FixHour(hour);
	    PlayerInfo[giveplayerid][pLocked2] = 1;
	    PlayerInfo[giveplayerid][pBanKol] ++;
	    PlayerInfo[giveplayerid][pBanTime1] = curdate+chislo;
	    PlayerInfo[giveplayerid][pBanData1] = curdate;
     	    hour = shifthour;
     	    new data2[64];
     	    GetPlayerIp(giveplayerid,ip,14);
	    format(data2, 16, "%d-%d-%d %d:%d",day,month,year,hour,minuite); // записываем: время, дата, день, когда выдан бан
	    format(stringer, sizeof(stringer), "INSERT INTO `banlog` (`Name`, `NameAdmin`, `Day`, `Date`, `Text`) VALUES ('%s','%s','%d','%s','%s')",PlayerInfo[giveplayerid][pNames],PlayerInfo[playerid][pNames],chislo,data2,stringr); // записываем в лог ( в БД ), расположение меняем по себя
 		mysql_function_query(connects, stringer, false, "","");
   	    format(stringer, sizeof(stringer), "%s, его IP [%s]",PlayerInfo[giveplayerid][pNames], ip); // пишем администрации ip игрока
	    ABroadCast(COLOR_LIGHTRED,stringer,1);
     	KickEx(giveplayerid); // кикаем игрока
	    return true;
    }
Скрины:
Когда нас банят
Если пытаемся зайти на сервер
Что пишет в БД ( id 3 - т.е. этот игрок получил 3-ий бан, за игровой процесс, Name - Ник забаненного, NameAdmin - ник админа, который банил, Day - на сколько дней, Date - когда был забанен, Text - причина бана )
Что будет во 2-ой версии:
1) Исправлю Недочёты, такие как: расширю диалог, который показывает игроку, за что его забанили
2) Добавлю: Когда игрок заходит на сервер, чтобы ему писало, кто, за что и когда его забанил
3) Сделаю, например: Если забанить на 7 дней, то будет писать, что забанен на неделю
Таблицу не кидаю, т.к. всё везде стандартное
На этом всё! Всем спасибо за внимание! Автор я.
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу