Ayuda, distancia entre... -
OTACON - 21.12.2013
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);
}
Re: Ayuda, distancia entre... -
Miguel - 21.12.2013
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?
Respuesta: Ayuda, distancia entre... -
JustBored - 21.12.2013
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.
Respuesta: Ayuda, distancia entre... -
bm0z - 21.12.2013
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;
}
Respuesta: Ayuda, distancia entre... -
OTACON - 21.12.2013
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;}