SA-MP Forums Archive
Validando nombre rp. - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+---- Thread: Validando nombre rp. (/showthread.php?tid=526287)



Validando nombre rp. - Juance - 16.07.2014

Hice muchas funciones, hasta aprendн a controlar SQLite, hacer consultas, registro, logeo, guardado y cargado de datos, updatear, en fin, he aprendido a hacer muchas cosas, pero lo que no me sale, que supongo es algo sencillo, es validar un nombre roleplay, que al conectar los kickee si en su nombre no tienen "_" o bien tienen algъn carбcter como "| @ # ~ ¬ " o algъn nъmero en su nombre.


Respuesta: Validando nombre rp. - EduGTA - 16.07.2014

Podrнas utilizar esta pequeсa funciуn que hice hace tiempo.


Respuesta: Validando nombre rp. - Swedky - 16.07.2014

Es bastante sencillo y se hace con un bucle que verifique cada caracter de la cadena.

Una manera serнa haciendo esto:

pawn Код:
stock IsNameRP(string[])
{
    if(strfind(string, "_") == -1) return 0; // No se encontrу un "_" en la cadena y la funciуn devolverб 0.

    new const len = strlen(string);
    for(new i = 0; i < len; i++)
    {
        '#', '@', .... /*aquн sigues tъ*/: return 0; // Aquн se encontrу un caracter invбlido, por lo que la funciуn retornarб 0.
    }
    return 1; // Se encontrу un "_" y ningъn caracter invбlido en la cadena, por lo que la funciуn retorna 1.
}
Creo que entenderбs lo que dice el cуdigo, sino, me lo dices


EDIT: Edu me ganу... otra vez


Respuesta: Validando nombre rp. - Juance - 16.07.2014

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н?


Respuesta: Validando nombre rp. - EduGTA - 16.07.2014

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н
}



Respuesta: Validando nombre rp. - adri1 - 16.07.2014

Quote:
Originally Posted by EnzoMetlc
Посмотреть сообщение
Es bastante sencillo y se hace con un bucle que verifique cada caracter de la cadena.

Una manera serнa haciendo esto:

pawn Код:
stock IsNameRP(string[])
{
    if(strfind(string, "_") == -1) return 0; // No se encontrу un "_" en la cadena y la funciуn devolverб 0.

    new const len = strlen(string);
    for(new i = 0; i < len; i++)
    {
        '#', '@', .... /*aquн sigues tъ*/: return 0; // Aquн se encontrу un caracter invбlido, por lo que la funciуn retornarб 0.
    }
    return 1; // Se encontrу un "_" y ningъn caracter invбlido en la cadena, por lo que la funciуn retorna 1.
}
Creo que entenderбs lo que dice el cуdigo, sino, me lo dices


EDIT: Edu me ganу... otra vez
Seсor Enzo Crasyd creo que el nombre del stock estarнa mal puesto ya que 'IsNameRP' serнa en espaсol como 'EsRPNombre', la forma correcta serнa 'IsRPName'.

Buenos dнas/tardes/noches caballero.


Respuesta: Validando nombre rp. - Juance - 16.07.2014

Gran explicaciуn Edu. Hice unas cuantas pruebas y la verdad es lo que querнa. Te soy sincero, no entendн mucho el cуdigo, se me hizo un gran quilombo en mi cabeza, pero voy a terminar entendiendolo, de eso estoy seguro. Gracias!!


Respuesta: Validando nombre rp. - Swedky - 16.07.2014

Quote:
Originally Posted by adri1
Посмотреть сообщение
Seсor Enzo Crasyd creo que el nombre del stock estarнa mal puesto ya que 'IsNameRP' serнa en espaсol como 'EsRPNombre', la forma correcta serнa 'IsRPName'.

Buenos dнas/tardes/noches caballero.
Da igual, en el cifrado que hizo Kalcor + RakSAMP serнa peor mierda inleнble.


Respuesta: Validando nombre rp. - adri1 - 16.07.2014

Nada aquн. Circule