Validando nombre rp.
#5

Quote:
Originally Posted by Juance
Посмотреть сообщение
Le agradezco a los dos.

La funciуn de Edu no detecta algъn carбcter invбlido o nъmero, solo "_" їme equivoco o es asн?
pawn Код:
stock IsRolePlayName(playerid)
{
    new pName[MAX_PLAYER_NAME], Count;
    GetPlayerName(playerid, pName, sizeof(pName));
   
    if(strfind(pName, "_") == -1 || strlen(pName) < 7) return 0;
   
    for(new Loop; Loop < strlen(pName); Loop++) switch(pName[Loop]) { case 'A'..'Z': {Count++;} case 'a'..'z', '_': {} default: return 0; }
    switch(pName[0]) { case 'A'..'Z': {} default: return 0; }
    switch(pName[strfind(pName, "_")+1]) { case 'A'..'Z': {} default: return 0; }
   
    if(Count > 2) return 0;
   
    return 1;
}
Empecemos:

pawn Код:
new pName[MAX_PLAYER_NAME], Count;
Creamos 2 variables, pName (para almacenar el nombre) y Count, para contar las mayъsculas.

pawn Код:
GetPlayerName(playerid, pName, sizeof(pName));
Obtenemos el nombre del jugador y guardamos el resultado en pName.

pawn Код:
if(strfind(pName, "_") == -1 || strlen(pName) < 7) return 0;
1є - Buscamos si en pName (Donde tenemos guardado el nombre del jugador) existe '_', si NO se encuentra, retornarб 0, caso contrario, retornarб 1 y continuarб.

2є - Verificamos si el nombre del jugador tiene por lo menos 7 caracteres ( Puedes modificarlo a tu gusto ), si su nombre NO tiene por lo menos 7 caracteres, retornarб 0, caso contrario, 1.

pawn Код:
for(new Loop; Loop < strlen(pName); Loop++) switch(pName[Loop]) { case 'A'..'Z': {Count++;} case 'a'..'z', '_': {} default: return 0; }
1є - Hacemos un loop del tamaсo del nombre del jugador.
2є - Revisamos cada letra del nombre del jugador, y verificamos:
2.1є - Cuantas mayъsculas tiene en su nombre (De 'A' a 'Z), cada vez que encontremos una mayъscula, se le suma 1 a Count.
2.2є - Si las letras del nombre del jugador son entre 'a' y 'z' (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z), saltando '_' (Para no dar error).
2.3є - Si se encuentra cualquier otro caracter que NO sea entre 'A', 'Z', 'a', 'z' y '_', automбticamente se romperб el Loop y retornarб 0.

pawn Код:
switch(pName[0]) { case 'A'..'Z': {} default: return 0; }
Revisamos si el primer carбcter del nombre del jugador estб en mayъsculas (Entre 'A' y 'Z'), si NO estб en mayъsculas, retornarб 0, caso contrario, 1.

pawn Код:
switch(pName[strfind(pName, "_")+1]) { case 'A'..'Z': {} default: return 0; }
Revisamos si el primer carбcter que viene despuйs de '_' estб en mayъsculas, si NO estб en mayъsculas, retornarб 0, caso contrario, 1.

pawn Код:
if(Count > 2) return 0;
Verificamos si Count es mayor de 2, si es asн, retornarб 0.

Espero que se explique.

Si quieres probarlo tu mismo:

pawn Код:
stock IsRolePlayName(pName[])
{
    new Count;
    //GetPlayerName(playerid, pName, sizeof(pName));
   
    if(strfind(pName, "_") == -1) return print("No se encontrу '_' en el nombre"), 0;
    if(strlen(pName) < 7) return printf("El tamaсo del nombre es %d, cuando el mнnimo es 8", strlen(pName)), 0;
   
    for(new Loop; Loop < strlen(pName); Loop++)
    {  
        switch(pName[Loop])
        {
            case 'A'..'Z':
            {
                printf("%c es una mayъscula", pName[Loop]);
                Count++;
            }
            case 'a'..'z', '_':
            {
                printf("%c es una letra aceptable (Obviando el '_')", pName[Loop]);
            }
           
            default:
            {
                printf("%c no es natural...", pName[Loop]);
                return 0;
            }
        }
    }
   
    switch(pName[0])
    {
        case 'A'..'Z':
        {
            printf("%c es una mayъscula, es aceptable", pName[0]);
        }
        default:
        {
            printf("%c no es una mayъscula, nonono", pName[0]);
            return 0;
        }
    }
   
    switch(pName[strfind(pName, "_")+1])
    {
        case 'A'..'Z':
        {
            printf("%c es una mayъscula, es aceptable", pName[strfind(pName, "_")+1]);
        }
        default:
        {
            printf("%c no es una mayъscula, nonono", pName[strfind(pName, "_")+1]);
            return 0;
        }
    }
   
    if(Count > 2)
    {
        printf("Tenemos %d mayъsculas, por quй?", Count);
        return 0;
    }
   
    printf("Sep, '%s' es un nombre aceptable, aplausos!", pName);
   
    return 1;
}

public OnFilterScriptInit()
{
    printf("%d", IsRolePlayName("Carlos_Andres")); // Pon cualquier nombre aquн
}
Reply


Messages In This Thread
Validando nombre rp. - by Juance - 16.07.2014, 18:00
Respuesta: Validando nombre rp. - by EduGTA - 16.07.2014, 18:09
Respuesta: Validando nombre rp. - by Swedky - 16.07.2014, 18:11
Respuesta: Validando nombre rp. - by Juance - 16.07.2014, 18:26
Respuesta: Validando nombre rp. - by EduGTA - 16.07.2014, 19:57
Respuesta: Validando nombre rp. - by adri1 - 16.07.2014, 21:26
Respuesta: Validando nombre rp. - by Juance - 16.07.2014, 22:02
Respuesta: Validando nombre rp. - by Swedky - 16.07.2014, 22:08
Respuesta: Validando nombre rp. - by adri1 - 16.07.2014, 22:10

Forum Jump:


Users browsing this thread: 1 Guest(s)