16.07.2014, 19:57
Quote:
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;
}
pawn Код:
new pName[MAX_PLAYER_NAME], Count;
pawn Код:
GetPlayerName(playerid, pName, sizeof(pName));
pawn Код:
if(strfind(pName, "_") == -1 || strlen(pName) < 7) return 0;
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; }
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; }
pawn Код:
switch(pName[strfind(pName, "_")+1]) { case 'A'..'Z': {} default: return 0; }
pawn Код:
if(Count > 2) return 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н
}