CMD:comando(playerid,params[])
{
Parametros_Locos(playerid,20,10);
return 1;
}
stock Parametros_Locos(playerid, valor=0,valor2=0,valor3=0)
{
new parametros_usados;
if(valor >= 1) parametros_usados += 1;
if(valor2 >= 1) parametros_usados += 1;
if(valor3 >= 1) parametros_usados += 1;
if(parametros_usados == 1)
{
SendClientMessage(playerid, -1, "usaste 1 parametro");
}
else if(parametros_usados == 2)
{
SendClientMessage(playerid, -1, "Usastes 2 parametros");
}
else if(parametros_usados == 3)
{
SendClientMessage(playerid, -1, "Usastes 3 parametros");
}
else
{
SendClientMessage(playerid, -1, "no usaste ningun parametro");
}
return -1;
}
valor = (valor >= 1) ? parametros_usados ++ : 0; valor2 = (valor2 >= 1) ? parametros_usados ++ : 0; valor3 = (valor3 >= 1) ? parametros_usados ++ : 0;
stock funcion(arg1, ...)
{
new argumentos = numargs()-1;
/*switch(argumentos)
{
case 0:
{
}
case 1:
{
}
case 2:
{
}
}*/
printf("Se encontraron %d argumentos en la funciуn.", argumentos);
return argumentos;
}
No lo habнa pensado, no he usado eso mucho.
Код:
valor = (valor >= 1) ? parametros_usados ++ : 0; valor2 = (valor2 >= 1) ? parametros_usados ++ : 0; valor3 = (valor3 >= 1) ? parametros_usados ++ : 0; |
#define plural_singular(%0,%1,%2) ((%0) == 1) ? ((#%1)) : ((#%2))
CMD:comando(playerid, params[])
{
Parametros_Locos(playerid, 20, 10);
return 1;
}
stock Parametros_Locos(playerid, valor_1 = 0, valor_2 = 0, valor_3 = 0)
{
new parametros_usados;
if(valor_1) parametros_usados ++;
if(valor_2) parametros_usados ++;
if(valor_3) parametros_usados ++;
if(!parametros_usados)
{
SendClientMessage(playerid, -1, "No usaste ningun parametro.");
}
else
{
new string[128];
format(string, sizeof(string), "Usaste %d %s.", parametros_usados, plural_singular(parametros_usados, "parametro", "parametros"));
SendClientMessage(playerid, -1, string);
}
return 1;
}
En realidad si funciona, lo habнa testeado antes. Aun no me manejo con los macros.
No tiene un objetivo en concreto, son solo experimentos, prбcticas. |
main()
{
Parametros_Locos(20, 50);
}
stock Parametros_Locos(valor_1 = 0, valor_2 = 0, valor_3 = 0)
{
new parametros_usados;
valor_1 = (valor_1 >= 1) ? parametros_usados ++ : 0;
valor_2 = (valor_2 >= 1) ? parametros_usados ++ : 0;
valor_3 = (valor_3 >= 1) ? parametros_usados ++ : 0;
printf("%d %d %d", valor_1, valor_2, parametros_usados);
return 1;
}
0 1 2 |
Prueba esto:
pawn Код:
No creo que quisieras que esos valores sean inutilizables. Aunque lo podrias usar despues de usar sus valores. Pero bueno, no veo el punto en hacer eso, podrias utilizar condiciones, tiene mas sentido. |
// 3 parametros opcionales (valor defecto 0) stock Parametros_Locos(playerid, valor=0,valor2=0,valor3=0) { new parametros_usados; // valor de la variable 0 // luego checkeo que el valor del primer parametro de la funcion sea igual o mayor a 1 // en caso de ser asi, le suma a la variable "parametro_usados", asi sucesivamente por todos los parametros valor = (valor >= 1) ? parametros_usados ++ : 0; valor2 = (valor2 >= 1) ? parametros_usados ++ : 0; valor3 = (valor3 >= 1) ? parametros_usados ++ : 0; // luego checkeo el valor que tenga la variable parametro_usado, eso determinara cuantos parбmetros use if(parametros_usados == 1) { SendClientMessage(playerid, -1, "usaste 1 parametro"); } else if(parametros_usados == 2) { SendClientMessage(playerid, -1, "Usastes 2 parametros"); } else if(parametros_usados == 3) { SendClientMessage(playerid, -1, "Usastes 3 parametros"); } else { SendClientMessage(playerid, -1, "no usaste ningun parametro"); } return -1; }
Veamos, yo no sй para donde te has saltado tu, pero lo que colocas no es lo que intento. Bбsicamente estoy contando los parбmetros que estoy usando, para ello uso
Код:
// 3 parametros opcionales (valor defecto 0) stock Parametros_Locos(playerid, valor=0,valor2=0,valor3=0) { new parametros_usados; // valor de la variable 0 // luego checkeo que el valor del primer parametro de la funcion sea igual o mayor a 1 // en caso de ser asi, le suma a la variable "parametro_usados", asi sucesivamente por todos los parametros valor = (valor >= 1) ? parametros_usados ++ : 0; valor2 = (valor2 >= 1) ? parametros_usados ++ : 0; valor3 = (valor3 >= 1) ? parametros_usados ++ : 0; // luego checkeo el valor que tenga la variable parametro_usado, eso determinara cuantos parбmetros use if(parametros_usados == 1) { SendClientMessage(playerid, -1, "usaste 1 parametro"); } else if(parametros_usados == 2) { SendClientMessage(playerid, -1, "Usastes 2 parametros"); } else if(parametros_usados == 3) { SendClientMessage(playerid, -1, "Usastes 3 parametros"); } else { SendClientMessage(playerid, -1, "no usaste ningun parametro"); } return -1; } |
#define plural_singular(%0,%1,%2) ((%0) == 1) ? ((#%1)) : ((#%2))
stock Parametros_Locos(playerid, ...)
{
new arguments = numargs() - 1;
if(!arguments)
{
SendClientMessage(playerid, -1, "No usaste ningun parametro.");
}
else
{
new string[128];
format(string, sizeof(string), "Usaste %d %s.", arguments, plural_singular(arguments, "parametro", "parametros"));
SendClientMessage(playerid, -1, string);
}
return 1;
}
Quizб:
pawn Код:
|
Parametros_Locos(20); // imprimira que tengo 2 parametros (3 si contamos desde el 0)