DUDA COMO HACER ESTA FUNCION?
#1

Como podria hacer una funcion para detectar las ids de los jugadores a cierta distancia de otro?

por ejemplo como esta funcion:

pawn Код:
public GetClosestPlayer(P1)
{
new X, Float:Dis, Float:Dis2, Player;
Player = -1;
Dis = 99999.99;
for (X=0; X<MAX_PLAYERS; X++)
{
if(IsPlayerConnected(X))
{
if(X != P1)
{
Dis2 = GetDistanceBetweenPlayers(X,P1);
if(Dis2 < Dis && Dis2 != -1.00)
{
Dis = Dis2;
Player = X;
}
}
}
}
return Player;
}
pero esa solo detecta la id de 1 solo, yo quiero que devuelva las IDS de todos los cercanos algo por ejemplo asi:

GetClosestPlayerS(playerid,15.0); // playerid = jugadores cercanos a ese id, 15.0 = distancia

alguien tiene idea de como hacerlo?
-Gracias.

edit: quiero utilizarlo mбs o menos asн:
pawn Код:
new string2[300], dPlayerID = GetClosestPlayerS(playerid,15.0);
format(string2,sizeof(string2),"Los Jugadores a 15m de distancia tuyos son: %s [ID: %d],",dPlayerID);
SendClientMessage(playerid,ROJO,string2);
Reply
#2

No lo puedes hacer en una funcion, por que las funciones solo retornan un valor, lo que puedes hacer es que en vez de usar una funcion uses este codigo donde lo necesitas

pawn Код:
for(new jugador=0;jugador<MAX_PLAYERS;jugador++)
        if(IsPlayerConnected(jugador) && !IsPlayerNPC(jugador))
        {
            new Float:Pos[3];
            GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
            if(IsPlayerInRangeOfPoint(jugador,rango,Pos[0],Pos[1],Pos[2])
            {
                new string[128];
                format(string,sizeof(string),"** El jugador %d esta a una distancia menor a los %f metros de ti",jugador,rango);
                SendClientMessage(playerid,-1,string);
            }
        }
Oviamente modificas el rango.
Reply
#3

No entiendo como puede retornar valores de esa forma, te hago asн:

pawn Код:
stock GetClosestPlayers(playerid, &array_IDS[], Float:radi)
{
    new
        count, Float:p [3];
    for(new i; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i))
    {
        GetPlayerPos(playerid, p[0], p[1], p[2]);
        if(GetPlayerDistanceFromPoint(playerid, p[0], p[1], p[2]) < radi)
        {
            array_IDS[count] = i; //almacenas en el array
            count++;
        }
    }
    return count; //retorna la cantidad de jugadores
}
ejemplo
pawn Код:
new
    players[MAX_PLAYERS], str[200],
    count = GetClosestPlayers(playerid, players, 15.0);

str[] = "Los IDS a 15 mts tuyo son:";
for(new i; i < count; i++)
{
    new str2[5];
    valstr(str2, players[i]);//alm,acenas en str2 el valor que te da pero como string
    strcat(str, " ");//haces un espacio
    strcat(str, str2);
}

SendClientMessage(playerid, -1, str);
Reply
#4

Quote:
Originally Posted by xSDx
Посмотреть сообщение
No lo puedes hacer en una funcion, por que las funciones solo retornan un valor, lo que puedes hacer es que en vez de usar una funcion uses este codigo donde lo necesitas

pawn Код:
for(new jugador=0;jugador<MAX_PLAYERS;jugador++)
        if(IsPlayerConnected(jugador) && !IsPlayerNPC(jugador))
        {
            new Float:Pos[3];
            GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
            if(IsPlayerInRangeOfPoint(jugador,rango,Pos[0],Pos[1],Pos[2])
            {
                new string[128];
                format(string,sizeof(string),"** El jugador %d esta a una distancia menor a los %f metros de ti",jugador,rango);
                SendClientMessage(playerid,-1,string);
            }
        }
Oviamente modificas el rango.
Si se puede y muy fбcil, lo retornas en un array
Reply
#5

Quote:
Originally Posted by Josstaa
Посмотреть сообщение
Si se puede y muy fбcil, lo retornas en un array
Si tienes razon se me voto la canica o estaba muy dormido ja
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)