Aspectos Aleatorios - Usar numargs(), getarg(...) y random(...) para hacer sistemas aleatorios dinбmicos y mas fбciles! -
SickAttack - 09.05.2015
Aspectos Aleatorios
Usar numargs(), getarg(...) y random(...) para hacer
sistemas aleatorios dinбmicos y mas fбciles!
Informaciуn
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:
Desarrollo
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));
}
Muy bien, vamos a suponer que deseas aplicar diferentes animaciones al azar en la selecciуn de clases para diferentes clases. Entonces harнamos algo como esto:
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);
}
}
Dependiendo de la clase que estб viendo actualmente en la selecciуn de clases, se elegirб un нndice de animaciуn aleatoriamente que especificamos en nuestra funciуn y luego serб aplicada.
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.
|
Tradicionalmente harнas esto:
pawn Code:
random(10);
O incluso esto:
RandomBetween(min, max)
{
new rand = random(max - min) + min;
return rand;
}
Pero si quieres retornar valores especificadas aleatoriamente?
pawn Code:
RandomNumber(...)
{
new arguments = numargs(), selected = getarg(random(arguments));
return selected;
}
printf("Random Argument: %d", RandomNumber(500, 1000, 1500, 2000));
Retornara uno de los valores que esta en los argumentos de la funciуn.
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);
}
Y puedes hacer muchos mas cosas con estos funciones, sуlo tienes que poner tu imaginaciуn en juego!
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);
}
Conclusiуn
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.
Respuesta: Aspectos Aleatorios - Usar numargs(), getarg(...) y random(...) para hacer sistemas aleatorios dinбmicos y ma -
Ghost112397 - 10.05.2015
Muy ъtil :3
A lo mejor lo uso para un sistema de recompensas, muchas gracias!