Ayuda, distancia entre...
#1

Buenas a todos, alguien mep odria decir que esta mal que no me funciona correctamente el siguiente codigo, es para detectar si un jugador esta cerca de un objeto.

pero responde solo con el ultimo slots. :S

desde ya muchas gracias.


pawn Код:
if(DistanceBetweenObjectAndPlayer(playerid) < 3.5){
//esta cerca dle objeto
}else{
//no esta cerca dle objeto
}

stock DistanceBetweenObjectAndPlayer(playerid){
    new Float:pos1[3],Float:pos2[3],Float:distance;
    for(new slots=1,idx=MAX_SLOTS;slots!=idx;slots++){
        GetObjectPos(VariableObjetos[slots], pos1[0], pos1[1], pos1[2]);
        GetPlayerPos(playerid, pos2[0], pos2[1], pos2[2]);
        distance = floatsqroot(floatpower(floatabs(floatsub(pos1[0], pos2[0])),2)+floatpower(floatabs(floatsub(pos1[1], pos2[1])),2)+floatpower(floatabs(floatsub(pos1[2], pos2[2])),2));
    } return floatround(distance);
}
Reply
#2

Intentas detectar si el jugador estб cerca de un objeto en especнfico, la pregunta serнa: їcon respecto a cuбl objeto? La funciуn que estбs proporcionando retorna la distancia con respecto al ъltimo objeto que hay en VariableObjetos, їrealmente ese es el objeto en cuestiуn?

Tendrнas mбs sentido que trataras de saber cual es el objeto que estб mбs cerca del jugador o que intentaras saber si cierto(s) objetos estan a menos de x distancia del jugador.

Nota: їpara que floatround en el return? їQuieres retornar el nъmero sin decimales?
Reply
#3

Claro, como dice Miguel. Supongo que se podrнa hacer algo masomenos asн:
pawn Код:
DistanceBetweenObjectAndPlayer(playerid, objectid)
{
for(new slots = 1, i = MAX_SLOTS; slots!=i; slots++)
{
if(VariableObjetos[slots] == objectid)
{
        new Float:pos1[3],Float:pos2[3],Float:distance;
        GetObjectPos(VariableObjetos[slots], pos1[0], pos1[1], pos1[2]);
        GetPlayerPos(playerid, pos2[0], pos2[1], pos2[2]);
        distance = floatsqroot(floatpower(floatabs(floatsub(pos1[0], pos2[0])),2)+floatpower(floatabs(floatsub(pos1[1], pos2[1])),2)+floatpower(floatabs(floatsub(pos1[2], pos2[2])),2));
        return distance;
}
}
return -1.0;
}
Fнjate si eso te funciona.
Reply
#4

pawn Код:
stock Float:DistanceBetweenObjectAndPlayer(playerid)
{
    new Float:pos1[3], Float:pos2[3], Float:d, Float:distance = 9999.0;
    for(new slots = 1, idx = MAX_SLOTS; slots != idx; slots++)
    {
        GetObjectPos(VariableObjetos[slots], pos1[0], pos1[1], pos1[2]);
        GetPlayerPos(playerid, pos2[0], pos2[1], pos2[2]);
        d = floatsqroot(floatpower(floatabs(floatsub(pos1[0], pos2[0])), 2) + floatpower(floatabs(floatsub(pos1[1], pos2[1])),2) + floatpower(floatabs(floatsub(pos1[2], pos2[2])), 2));
        if(d < distance) distance = d;
    }
    return distance;
}
Reply
#5

lo solucione asi, esta bien o no?...

pawn Код:
stock DistanceBetweenObjectAndPlayer(playerid, Float:dist){
new Float:pos[3];
for(new slots=0,idx=MAX_SLOTS;slots!=idx;slots++){
    GetObjectPos(VariableObjeto[slots], pos[0], pos[1], pos[2]);
    if(IsPlayerInRangeOfPoint(playerid, dist, pos[0], pos[1], pos[2]))return true;
}return false;}
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)