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.
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