[DUDA] їPorquй falla este cуdigo?
#1

Buenas! Tengo un problema con un cуdigo creador por DesingMyCry: (El cуdigo fue creado por йl respondiendo una duda mнa en otro post, de hace mas de 1 aсo, el post ya murio)
PHP код:
stock obtenerIDrandom()
{
    new 
ab[MAX_PLAYERS];
    for(new 
playerid 0playerid MAX_PLAYERSplayerid++)
    {
        if(!
IsPlayerConnected(playerid)) continue;
        
b[a++] = playerid;
    }
    return 
b[random((a)-(0b01))];

* Los problemas son:

Si hay solo 1 jugador conectado, da un error que peta todo. (Puse el "obtenerIDrandom" en un CMD: y cuando uso el Comando, si solo hay 1 jugador conectado, me dice que el comando no existe)
Ejemplo: Hay 5 jugadores, de los 5 en el random solo salen del 1 a 4, la ultima/mayor ID nunca sale seleccionada en el random.
Si hay 2 jugadores, en el random sale siempre la ID mas "pequeсa" (Ejemplo: Hay 2 jugadores conectados, uno es ID 1 y el otro ID 2/3/4 Etc o mayor a la ID del jugador 1, entonces siempre selecciona la ID 1 (El jugador con la ID mas pequeсa de los 2 jugadores conectados, siempre va ser el seleccionado, es como si detectara solo 1 jugador conectado, pero como dije arriba, cuando hay solo 1 jugador conectado, se buguea y no sigue el codigo, o algo asн, como con el ejemplo del CMD que puse en el error 1°))

Gracias de ante mano, espero me puedan ayudar.
Reply
#2

pawn Код:
new rand;
while((rand = random(GetPlayerPoolSize() + 1)) && IsPlayerConnected(rand))
{
    // rand es igual una ID random conectada.
}
EDIT: si utlizas foreach/y_iterate, utiliza la funciуn "Iter_Random(Player);"
Reply
#3

Код:
stock obtenerIDrandom()
{
    new a = 0, b[MAX_PLAYERS];
    for(new playerid = 0; playerid < MAX_PLAYERS; playerid++)
    {
        if(!IsPlayerConnected(playerid)) continue;
        b[a++] = playerid;
    }
    if(a) return b[random(a)];
    return INVALID_PLAYER_ID;
}
con eso basta.
Reply
#4

Quote:
Originally Posted by EnzoMetlc
Посмотреть сообщение
pawn Код:
new rand;
while((rand = random(GetPlayerPoolSize() + 1)) && IsPlayerConnected(rand))
{
    // rand es igual una ID random conectada.
}
EDIT: si utlizas foreach/y_iterate, utiliza la funciуn "Iter_Random(Player);"
Muchas Gracias, me quedo mas facil remplazar el codigo que descargar include y tal.

Quote:
Originally Posted by aoEXE
Посмотреть сообщение
Код:
stock obtenerIDrandom()
{
    new a = 0, b[MAX_PLAYERS];
    for(new playerid = 0; playerid < MAX_PLAYERS; playerid++)
    {
        if(!IsPlayerConnected(playerid)) continue;
        b[a++] = playerid;
    }
    if(a) return b[random(a)];
    return INVALID_PLAYER_ID;
}
con eso basta.
Muchas gracias, funciono perfectamente!
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)