SA-MP Forums Archive
[Duda] Cуmo hacer para...? - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Español/Spanish (https://sampforum.blast.hk/forumdisplay.php?fid=29)
+---- Thread: [Duda] Cуmo hacer para...? (/showthread.php?tid=491624)



[Duda] Cуmo hacer para...? - Swedky - 31.01.2014

He intentado tantas cosas que no me quedу otra que pedir ayuda.


Necesito saber cуmo hacer para que una funciуn devuelva la ID del jugador con mбs puntos.

Hice esto:


pawn Код:
stock SearchPlayerWhitHighPoints()
{
    new Value = -1;
    new player = -1;
    new Float:Var;
   
    foreach(new i: Player)
    {
        Var = PlayerInfo[i][RadarSpeed]; // Los puntos serнa 'PlayerInfo[i][RadarSpeed]'.
        if(Var > Value)
        {
            player = i;
        }
    }
    return player;
}

Y no funciona, es mбs, ni yo le veo la lуgica a esa funciуn .
Alguien me podrнa decir cуmo hacer eso?

Saludos.



Respuesta: [Duda] Cуmo hacer para...? - CrossOv3r - 31.01.2014

return i; ?


Respuesta: [Duda] Cуmo hacer para...? - Swedky - 31.01.2014

Quote:
Originally Posted by CrossOv3r
Посмотреть сообщение
return i; ?
Darнa errores. La funciуn que quiero hacer devolverнa la ID con mбs puntos.


Respuesta: [Duda] Cуmo hacer para...? - OTACON - 31.01.2014

explicate un poco mas, como con mas puntos?, explica un poco para que quieres la funcion.


Respuesta: [Duda] Cуmo hacer para...? - Swedky - 31.01.2014

Quote:
Originally Posted by OTACON
Посмотреть сообщение
explicate un poco mas, como con mas puntos?, explica un poco para que quieres la funcion.
Estoy haciendo un FS de carreras de Radar (Tipo NFS), y cada vez que un jugador llega a 'X' checkpoint, se extrae la velocidad del vehнculo y se le suma a la variable 'RadarSpeed'. Entonces, cada vez que el jugador llega al checkpoint, que la funciуn que necesito extraiga al jugador con mбs puntos.

Cappichi? xd.



Respuesta: [Duda] Cуmo hacer para...? - OTACON - 31.01.2014

pawn Код:
static PuntosPlayers[MAX_PLAYERS],
SumandoPuntosPlayers[MAX_PLAYERS];
pawn Код:
SumandoPuntosPlayers[playerid]++;
PuntosPlayers[playerid] = VELOCIDAD * SumandoPuntosPlayers[playerid];
pawn Код:
stock SearchPlayerWhitHighPoints(puntosMAX){
    new puntos=0;
    foreach(new user: Player){
        if(PuntosPlayers[user] > puntosMAX){
            puntos = user;
        }
    } return puntos;
}
pawn Код:
stock SearchPlayerWhitHighPoints(puntosMAX){
    new puntos=0, contar=0;
    foreach(new user: Player){
        if(PuntosPlayers[user] > puntosMAX){
            puntos = user;
            contar++;
        }
    }
    if(contar == 1) return puntos;
    else if(contar > 1) return -1;
}
es lo que entendi :/...


Re: [Duda] Cуmo hacer para...? - admantis - 31.01.2014

Se te ha olvidado cambiar el valor de Value, para que no sea cero siempre:

pawn Код:
stock SearchPlayerWhitHighPoints()
{
    new Value = -1;
    new player = -1;
    new Float:Var;

    foreach(new i: Player)
    {
        Var = PlayerInfo[i][RadarSpeed]; // Los puntos serнa 'PlayerInfo[i][RadarSpeed]'.
        if(Var > Value)
        {
            Value = floatround(Var); // esto, ademбs se convierte el float con floatround para evitar "tag mismatch"
            player = i;
        }
    }
    return player;
}



Respuesta: [Duda] Cуmo hacer para...? - TheChaoz - 31.01.2014

Esta forma es un poco mas rбpida ya que evitas asignaciones extra. (Si quieres una versiуn aun mas optimizada, te sugiero utilizar el algoritmo bubblesort, u otros algoritmos de bъsqueda)

pawn Код:
stock SearchPlayerWhitHighPoints()
{
    new
        tmp,
        Float:val;

    foreach(new i : Player)
    {
        if(PlayerInfo[i][RadarSpeed] > val)
        {
            tmp = i;
            val = PlayerInfo[i][RadarSpeed];
        }
    }
   
    return tmp;
}



Respuesta: [Duda] Cуmo hacer para...? - Swedky - 31.01.2014

Quote:
Originally Posted by the_chaoz
Посмотреть сообщение
Esta forma es un poco mas rбpida ya que evitas asignaciones extra. (Si quieres una versiуn aun mas optimizada, te sugiero utilizar el algoritmo bubblesort, u otros algoritmos de bъsqueda)

pawn Код:
stock SearchPlayerWhitHighPoints()
{
    new
        tmp,
        Float:val;

    foreach(new i : Player)
    {
        if(PlayerInfo[i][RadarSpeed] > val)
        {
            tmp = i;
            val = PlayerInfo[i][RadarSpeed];
        }
    }
   
    return tmp;
}
Tienes razуn xD. Reciйn me doy cuenta que las otras variables eran innecesarias xd.


Muchas gracias, y a los demбs tambiйn se lo agradezco xd.


EDIT: Tu cуdigo no funciona :/.

EDIT2: Sн, ahora funciona xd.


Respuesta: [Duda] Cуmo hacer para...? - OTACON - 31.01.2014

yo pregunto ...

la variable Float:val no esta de mas o esta mal colocada?.

pawn Код:
stock SearchPlayerWhitHighPoints()
{
    new
        tmp,
        Float:val; //xa se xrea cuando utiliza SearchPlayerWhitHighPoints

    foreach(new i : Player)
    {
        if(PlayerInfo[i][RadarSpeed] > val) //aca estaria en 0.0 la variable val
        {
            tmp = i;
            val = PlayerInfo[i][RadarSpeed]; //aca le establetemos el valor de la variable RadarSpeed a la variable val, pero despues no se usa o_O.
        }
    }

    return tmp;
}
EDIT: por lo que tu me explicaste, lo que quieres es esto peor bueh ...


pawn Код:
stock SearchPlayerWhitHighPoints(){
    new puntos=0;
    foreach(new user: Player){
        if(PlayerInfo[user][RadarSpeed] > puntosMAX){
            puntos = user;
        }
    } return puntos;
}
pawn Код:
stock SearchPlayerWhitHighPoints(){
    new puntos=0, contar=0;
    foreach(new user: Player){
        if(PlayerInfo[user][RadarSpeed] > puntosMAX){
            contar++;
            puntos = user;
        }
    }
    if(contar == 1) return puntos;
    else if(contar > 1) return INVALID_PLAYER_ID;
}