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

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

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

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

Проверка на RP ник

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

Thule

Умник
Функция проверяет имя (или любую другую строку) на правильность её написания по форматам:
  • Имя_Фамилия
  • Имя_пр_Фамилия
  • Имя_пр_пр_Фамилия
Все остальные попытки блокирует.

PHP:
stock IsRpName(name[])
{
	new bool:allowUnderscore,bool:bigletter=true,wordsize;
	new countUnderscore,bool:bigAfterUnscr[3],bool:needUnderscore;
	for(new i=0;i<strlen(name);i++)
	{
	    if(bigletter) //если требуется большая буква
	    {
	    	switch(name[i])
	    	{
 	    		case 'A'..'Z':
 				{
 				    if(countUnderscore > 0) // значит цикл уже не в начале слова.
 				    {
 				        bigAfterUnscr[countUnderscore-1] = true; //после одного из _ была большая буква.
 				    }
 				    bigletter=false; //следующая буква должна быть маленькой.
	 				wordsize++;
	 				continue;
				}
 	    		case 'a'..'z': //но может быть так, что не всегда после _ идет большая буква.
 	    		{ // это для особых ников по типу Saif_al_Adel или еще страшнее.
					if(countUnderscore > 0)
					{
						wordsize++;
						if(wordsize == 2) { needUnderscore=true; allowUnderscore=true; bigletter=false; } //заставляем проверить на _ . Приставка не может быть более 2х символов.
						//if(wordsize > 2) return 0; //приставка слишком большая получилась.
					}
					continue;
 	    		}
			}
			return 0;
		}
		if(!bigletter) //если не требуется большая буква, то может быть два варианта:
		{ // 1 - маленькая буква; 2 - подчеркивание.
            switch(name[i])
			{
				case 'a'..'z':
				{
				    if(needUnderscore) return 0; // нужно было обязательное подчеркивание, а его не было.
					wordsize++;
					if(wordsize >= 2) allowUnderscore=true; //если слово состоит из двух или более букв, то разрешаем подчеркивание.
					continue;
				}
				case '_':
				{
					if(!allowUnderscore) return 0; //мы не разрешали ставить подчеркивание.
				    if(wordsize < 2) return 0; //с_л_и_ш_к_о_м_ч_а_с_т_о_п_о_д_ч_е_р_к_и_в_а_н_и_я
				    needUnderscore=false;
					bigletter=true;
					countUnderscore++;
					if(countUnderscore > 3) return 0; // слишком много приставок.
					wordsize=0;
					continue;
				}
				
			}
			return 0;
		}
	}
	if(!bigAfterUnscr[0] && !bigAfterUnscr[1] && bigAfterUnscr[2]) return 1; // Saif_al_mah_Del
	if(!bigAfterUnscr[0] && bigAfterUnscr[1] && countUnderscore == 2) return 1; //Saif_al_Adel
	if(bigAfterUnscr[0] && countUnderscore == 1) return 1; //Saif_Adel
	return 0;
}

[09:49:13] 1 - Saif_Adel
[09:49:13] 1 - Saif_al_Adel
[09:49:13] 1 - Saif_al_ma_Adel
[09:49:13] 0 - Saif_al_mah_Adel
[09:49:13] 0 - Saif_adel
[09:49:13] 0 - saif_sdel
[09:49:13] 0 - saif__Adel
[09:49:13] 0 - SAif_AdEl
[09:49:13] 0 - Saif_Ga_Adel
[09:49:13] 0 - Saif_aG_dyn_Adel
[09:49:13] 0 - Saif_Adel99
[09:49:13] 0 - aif_Adel
[09:49:13] 0 - Saif_al_da_ma_Adel


Пример использования:
PHP:
public OnPlayerConnect(playerid)
{
	new playername[21];
	GetPlayerName(playerid,playername,21);
	if(!IsRpName(playername)) return SendClientMessage(playerid,COLOR_RED,"У Вас НОН-РП Имя.");
        return 1;
}
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу