09.05.2015, 23:32
Aspectos Aleatorios
Usar numargs(), getarg(...) y random(...) para hacer
sistemas aleatorios dinбmicos y mas fбciles!
InformaciуnUsar numargs(), getarg(...) y random(...) para hacer
sistemas aleatorios dinбmicos y mas fбciles!
En este tutorial usted adquirirб conocimiento sobre un mйtodo que se puede utilizar para hacer que tus sistemas aleatorios sean dinбmicos y mas fбciles de usar. Lo cual significa que puedes usar una funciуn que devuelve valores aleatorios o hace acciones al azar en diferentes partes de tu script, mientras tienes el control sobre lo que devuelve la funciуn/lo que se aplica.
En este tutorial usaremos los siguientes funciones integrados en SA:MP:
- numargs() - Obtener el numero de argumentos pasado a una funciуn.
- getarg(...) - Obtener el argumento que fue pasado a una funciуn.
- random(...) - Obtener un numero pseudo-aleatorio.
Primero iremos a la explicaciуn de lo que vamos a ver en este tutorial:
Vamos a crear una nueva funciуn y pondremos "..." entre el parйntesis de nuestra funciуn, esto le dirб al script que podemos y queremos poner cualquier cantidad de argumentos que queramos durante el uso de la funciуn. Usaremos numargs(...) para obtener el nъmero de argumentos que introducimos en la funciуn y luego vamos a almacenarla en una variable llamada "arguments". Usaremos getarg(...) para obtener lo introducido en el нndice de un argumento y luego vamos a almacenarla en una variable llamada "selected". Y finalmente utilizaremos random(...) para seleccionar un argumento al azar que esta ingresado en el parйntesis de la funciуn.
Nuestra estructura bбsica se vera asн:
pawn Code:
function(...)
{
new arguments = numargs(), selected = getarg(random(arguments));
}
pawn Code:
public OnPlayerRequestClass(playerid, classid)
{
switch(classid)
{
case 0: PlayRandomAnimation(playerid, 0, 1, 2, 3, 4, 5);
case 1: PlayRandomAnimation(playerid, 4, 5);
case 2: PlayRandomAnimation(playerid, 2, 5);
case 3: PlayRandomAnimation(playerid, 0, 1);
case 4: PlayRandomAnimation(playerid, 2, 4, 5);
case 5: PlayRandomAnimation(playerid, 2);
}
return 1;
}
PlayRandomAnimation(playerid, ...)
{
new arguments = numargs() - 1, selected = getarg(random(arguments) + 1);
switch(selected)
{
case 0: ApplyAnimation(playerid, "BENCHPRESS", "GYM_BP_CELEBRATE", 4.1, 1, 1, 1, 0, 0, 1);
case 1: ApplyAnimation(playerid, "DEALER", "DEALER_IDLE", 4.1, 1, 1, 1, 0, 0, 1);
case 2: ApplyAnimation(playerid, "DEALER", "DEALER_DEAL", 4.1, 1, 1, 1, 0, 0, 1);
case 3: ApplyAnimation(playerid, "COP_AMBIENT", "COPLOOK_THINK", 4.1, 1, 1, 1, 0, 0, 1);
case 4: ApplyAnimation(playerid, "FLAME", "FLAME_FIRE", 4.1, 1, 1, 1, 0, 0, 1);
case 5: ApplyAnimation(playerid, "GRAFFITI", "GRAFFITI_CHKOUT", 4.1, 1, 1, 1, 0, 0, 1);
}
}
Quote:
La primera clase reproducirб una animaciуn aleatoria, ya sea 0, 1, 2, 3, 4 o 5. La segunda clase reproducirб una animaciуn aleatoria, ya sea 4 o 5. La tercera clase reproducirб una animaciуn aleatoria, ya sea 2 o 5. La cuarta clase reproducirб una animaciуn aleatoria, ya sea 0 o 1. La quinta clase reproducirб una animaciуn aleatoria, ya sea 2, 4 o 5. La sexta clase reproducirб la segunda animaciуn indexada. |
pawn Code:
random(10);
O incluso esto:
RandomBetween(min, max)
{
new rand = random(max - min) + min;
return rand;
}
pawn Code:
RandomNumber(...)
{
new arguments = numargs(), selected = getarg(random(arguments));
return selected;
}
printf("Random Argument: %d", RandomNumber(500, 1000, 1500, 2000));
Incluso puedes enviar mensajes aleatorios especificados al azar!
pawn Code:
SendRandomMessage(playerid, 0, 2);
SendRandomMessage(playerid, 1, 3);
SendRandomMessage(playerid, ...)
{
new arguments = numargs() - 1, selected = getarg(random(arguments) + 1), string[32 char];
switch(selected)
{
case 0: strpack(string, "Hello!");
case 1: strpack(string, "How are you?");
case 2: strpack(string, "Good luck!");
case 3: strpack(string, "What's up?");
}
return SendClientMessage(playerid, -1, string);
}
Nota
Argumentos autуnomas afectan el resultado de numargs( ) y random(...), por lo que si usted estб planeando aсadir otros argumentos a su funciуn, reste el numero total de argumentos por la cantidad de argumentos que pusistes en la funciуn, y luego le aсades la cantidad a random(...).
pawn Code:
function(playerid, ...)
{
new arguments = numargs() - 1, selected = getarg(random(arguments) + 1);
}
Este mйtodo de crear sistemas aleatorios es mas fбcil de usar y te da la habilidad de escoger lo que quieres que la funciуn devuelva o aplica.