Coger cincos funciones
#1

Hola muchas gracias por todo, pero tengo una duda solo quiero un ejemplo completo.
resulta que quiero sacar 5 funciones random de estas 15 funciones, y luego las retenga y haga un conteo.
para que muestre esas 5 funciones en orden o pera ser mбs grбfico, son dialogos.

es como un sorteo de champion donde en un bombo grande de 15 equipos (dialogos) se elijan 5 equipos
para un grupo donde solo quepan 5. y que tambiйn obviamente si el equipo ya salio o ya fue elegido para el grupo no se vuelva a repetir (dialogo no se vuelva a sortear si ya se eligiу para el grupo de 5). y para finalizar..

bбsicamente son juegos de variable. ah y digamos en uno de los 5 dialogos elegidos por ejemplo si usas el primero en la lista de los cincos dialogos elegidos dependiendo si respondes bien o mal pasarбs al segundo dialogo (o funcion) elegidos y asi si el usuario puede llega hasta el ultimo dialogo elegido para el top 5 del top 15. finaliza el evento. (sistema)

pawn Код:
new Search = random(5);
switch(Search)
{
case 0:
{
ShowPlayerDialog(playerid, 0, ...);
}
case 1:
{
ShowPlayerDialog(playerid, 1, ...);
}
case 2:
{
ShowPlayerDialog(playerid, 2, ...);
}
case 3:
{
ShowPlayerDialog(playerid, 3, ...);
// Agrega las otras funciones.
}
case 4:
{
ShowPlayerDialog(playerid, 4, ...);
// Agrega las otras funciones.
}
case 5:
{
ShowPlayerDialog(playerid, 5, ...);
}
}
no pido cуdigo completo, solo un ejemplo bien ejecutado
Reply
#2

Puedes declarar un arreglo que contenga cinco IDs de dialogos, estos, como has dicho, son elegidos al azar de alguna forma.
pawn Код:
#define MAX_DIALOGOS_ALEA (5)

new gDialogos[MAX_DIALOGOS_ALEA] = {-1, ...};
new gNumDialogos = 0;
new gDialogoActual[MAX_PLAYERS] = {0, ...};
Debes tener en cuenta que TODOS los dialogos (sus IDs mejor dicho) deben estar definidos de alguna manera. Puede ser que estйn registrados en un arreglo o que simplemente sean los dialogos desde el 101 hasta el 116, ese es tu problema ya. Yo supondrй que son consecutivos y van desde el 20 hasta el 35.

Lo segundo serнa una pequeсa funciуn que agregue dialogos a mi arreglo.
pawn Код:
stock agregarDialogo(new dialogid)
{
  for (new i = 0; i < MAX_DIALOGOS_ALEA; ++i)
  {
    if (dialogid == gDialogos[i])
      return -1; // -1 sinificarб error.
  }
  gDialogos[gNumDialogos] = dialogid;
  return (++gNumDialogos); // Si no hay ningun error, se devuelve el nuevo tamaсo del arreglo.
}
Luego, en otro lugar, la funciуn que se encargarб de agregar TODOS los cinco dialogos de forma aleatoria. Lo ideal es que sacaras los IDs de un array del cual tienes el tamaсo y que le borras cada ID que sea seleccionado. Esto garantiza que no se tenga que repetir el proceso de selecciуn aleatoria cada vez que encuentre dos dialogos iguales.

Lamentablemente mi mundo no es perfecto y por ello te enseсo la forma fбcil, SIN ARREGLOS.
pawn Код:
stock seleccionarNDialogos()
{
  while (gNumDialogos < MAX_DIALOGOS_ALEA) {
    agregarDialogo(random(MAX_DIALOGOS_ALEA));
  }
}
// Cabe destacar que teуricamente este cуdigo puede correr infinitamente.
Por ъltimo mostramos los dialogos uno por uno.
pawn Код:
stock mostrarDialogosAleatorios(playerid)
{
  switch (gDialogos[ gDialogoActual[playerid] ])
  {
    case 0:
    {
      ShowPlayerDialog(playerid, gDialogos[ gDialogoActual[playerid] ], DIALOG_STYLE_MSGBOX, "x", "y", "z", "n");
    }
    case 1:
    {
      ShowPlayerDialog(playerid, gDialogos[ gDialogoActual[playerid] ], DIALOG_STYLE_MSGBOX, "x", "y", "z", "n");
    }
    case 2:
    {
    }
    case 3:
    {
    }
    // Los otros quince dialogos.
  }
  ++gDialogoActual[playerid];
}
Es un poco difнcil de visualizar a primera, intentarй recapitular:
  1. Tener todos los dialogos definidos (sus IDs, puede ser en un arreglo o simplemente asumir que es un rango de numeros).
  2. Tener un arreglo donde se guardaran los 5 dialogos aleatorios.
  3. Es necesario tener una variable que lleve la cuenta de los dialogos aleatorios que hemos guardado.
  4. Otra variable que indique cual es el prуximo dialogo a mostrar (el нndice del arreglo donde estб el dialogo).
  5. Una funciуn que, en base al ID del pуximo dialogo muestre CIERTO DIALOGO.
Ademбs, siempre hay formas mбs fбciles y mбs eficientes de solucionar un problema, solo espero que esto te sirva de ejemplo base para que tu mismo contruyas tu sistema a tu manera.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)