[DUDA/AYUDA] seleccion ramdom de ID
#1

Hola que tal amigos!

Bueno, quisiera saber como hacer para que me seleccione una ID(Un Jugador) en modo ramdom, de los que ahн conectados claro...

(Obviamente yo poder usar en otra funciуn esa ID que escogiу en el ramdom)

Por favor, si saben como o tienen ideas, me encantarнa y les agradecerнa mucho que me lo aportaran.
Reply
#2

Pruebe con:

pawn Код:
new Rand = -1;
while(!IsPlayerConnected(Rand)) Rand = random(MAX_PLAYERS);
SendClientMessage(Rand, -1, "Random player".); // Asн le aplica la funciуn al jugador elegido.
Suerte
Reply
#3

pawn Код:
SelectPlayerRandom()
{
    static
        players[MAX_PLAYERS],
        conectados;

    for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i)){
        players[conectados++] = i;
    }
    return random(players[random(conectados)]);
}
Intenta con eso, no sй si funcione ya que las ID pueden estar puestas no en el orden natural (0, 1, 2, 3, 4) pueden haber faltas de ID entre sн.
Reply
#4

Espero te sirva, es solo para escoger un jugador al azar pero que estй conectado.


pawn Код:
for (new i = 0; i != MAX_PLAYERS; ++i)
{
    if (IsPlayerConnected(i))
    {
        new Seleccionado = random(i);//saldrб al azar cualquier id de todos los players conectados. "solo conectados"
        GivePlayerMoney (Seleccionado, 50000);
        //mas funciones
        //mas funciones bla bla bla.
    }
}
Reply
#5

pawn Код:
connectedGetRandomID()
{
    new RandomID = random(GetMaxPlayers()), total_players_count;
    for(new i; i < GetMaxPlayers(); i++)
    {
        if(IsPlayerConnected(i))
        {
            total_players_count ++;
            if(IsPlayerConnected(RandomID))
            {
                return RandomID;
            }
        }
    }
    if(total_players_count > 1) // si hay mбs de un conectado, y el ID del random estб offline, se repite
    {
        return connectedGetRandomID(); // se repetirб hasta encontrar un random que estй conectado
    }
    else // caso contrario (hay solo un user, retorna con la ID del ъnico user online)
    {
        for(new i; i < GetMaxPlayers(); i++)
        {
            if(IsPlayerConnected(i))
            {
                return i;
            }
        }
    }
        return -1;
}
Modo de uso:

pawn Код:
public OnGameModeInit()
{
    SetTimer("FUNCION_RANDOM_EJEMPLAR", 10000, true); // cada 10 seg. se sortea el random
    return 1;
}

forward FUNCION_RANDOM_EJEMPLAR();
public FUNCION_RANDOM_EJEMPLAR()
{
    new msg_char[150], rand_id = connectedGetRandomID();
    if(rand_id != -1) // si no hay error al realizar el random
    {
        format(msg_char, sizeof(msg_char), "ID: %i (conectado) ha ganado el random", rand_id);
    }
return SendClientMessageToAll(-1, msg_char);
}
Reply
#6

Quote:
Originally Posted by LiMPiTo
Посмотреть сообщение
pawn Код:
connectedGetRandomID()
{
    new RandomID = random(GetMaxPlayers()), total_players_count;
    for(new i; i < GetMaxPlayers(); i++)
    {
        if(IsPlayerConnected(i))
        {
            total_players_count ++;
            if(IsPlayerConnected(RandomID))
            {
                return RandomID;
            }
        }
    }
    if(total_players_count > 1) // si hay mбs de un conectado, y el ID del random estб offline, se repite
    {
        return connectedGetRandomID(); // se repetirб hasta encontrar un random que estй conectado
    }
    else // caso contrario (hay solo un user, retorna con la ID del ъnico user online)
    {
        for(new i; i < GetMaxPlayers(); i++)
        {
            if(IsPlayerConnected(i))
            {
                return i;
            }
        }
    }
        return -1;
}
Modo de uso:

pawn Код:
public OnGameModeInit()
{
    SetTimer("FUNCION_RANDOM_EJEMPLAR", 10000, true); // cada 10 seg. se sortea el random
    return 1;
}

forward FUNCION_RANDOM_EJEMPLAR();
public FUNCION_RANDOM_EJEMPLAR()
{
    new msg_char[150], rand_id = connectedGetRandomID();
    if(rand_id != -1) // si no hay error al realizar el random
    {
        format(msg_char, sizeof(msg_char), "ID: %i (conectado) ha ganado el random", rand_id);
    }
return SendClientMessageToAll(-1, msg_char);
}
Que bonito seсor arquitecto, mi codigo no funcionу pero ya me estoy haciendo uno :3
Reply
#7

De verdad tanto problema para algo tan simple? Veo que comentan los que supuestamente "saben"...

Es bastante simple; primero guardamos los IDs conectados y luego entre esos hacemos un azar. A pawn serнa algo como:


pawn Код:
stock obtenerIDrandom()
{
    new a, b[MAX_PLAYERS];
    for(new playerid = 0; playerid < MAX_PLAYERS; playerid++)
    {
        if(!IsPlayerConnected(playerid)) continue;
        b[a++] = playerid;
    }
    return b[random((a)-(0b01)))];
}
Reply
#8

Amigo como tu querнas que salga al azar solo de los jugadores conectados un solo ganador aqui estб el codigo, lo probй y funciona a la perfecciуn.
pawn Код:
new Total_Conectados;// variable global.


CMD:seleccionar(playerid, params[])
{
    new string[128];
    format(string, sizeof(string), "Total de conectados: %i ",Total_Conectados);
    SendClientMessage(playerid, -1, string);
    new Seleccionado = random(Total_Conectados);
    format(string, sizeof(string), "id escogida: %i ",Seleccionado);
    SendClientMessage(playerid, -1, string);
    GivePlayerMoney (Seleccionado, 50000);
    //mas funciones
    //mas funciones bla bla bla.
    return true;
}


public OnPlayerConnect(playerid)
{
    Total_Conectados++;//suma los conectas
    //las demas funciones.
}

public OnPlayerDisconnect(playerid, reason)
{
    Total_Conectados--;//resta de los conectados
    //las demas funciones.
}
Reply
#9

No jotajeda. Ese cуdigo te funcionу porque solo habнa 1 jugador conectado.

Ya dejй la soluciуn.
Reply
#10

Quote:
Originally Posted by DesingMyCry
Посмотреть сообщение
No jotajeda. Ese cуdigo te funcionу porque solo habнa 1 jugador conectado.

Ya dejй la soluciуn.
Lo has probado? jajaja, yo si, probй con tres jugadores conectados, y me daba a uno, luego al otro, y asн al azar.

їLo probaste siquiera?
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)