[Ayuda] IsPlayerInRangeOfPoint...
#1

Buenas a Todos, Tenngo un problema con IsPlayerInRangeOfPoint , coloke varias coordenasdas separandola con || y un ! para comprobar si con difedente a la del player y si lo son me tirada el mensaje ke coloke en el return

si coloco asi , me tira el mensaje si estoy en en la posicion y rango y si no lo estoy:

pawn Код:
if(!IsPlayerInRangeOfPoint(playerid, 2.0, x, y, z) || !IsPlayerInRangeOfPoint(playerid, 2.0, x, y, z) || !IsPlayerInRangeOfPoint(playerid, 2.0, x, y, z) || !IsPlayerInRangeOfPoint(playerid, 2.0, x, y, z)) return SendClientMessage(playerid, -1, "    [!] no estas en la posicion exacta!.");
y si coloco asi, me funciona pero alrevez O_O :S , osea si estoy en la posicion y rango me sale el mensaje, y si no lo estoy pasa a la funcion:

pawn Код:
if(IsPlayerInRangeOfPoint(playerid, 2.0, x, y, z) || IsPlayerInRangeOfPoint(playerid, 2.0, x, y, z) || IsPlayerInRangeOfPoint(playerid, 2.0, x, y, z) || IsPlayerInRangeOfPoint(playerid, 2.0, x, y, z)) return SendClientMessage(playerid, -1, "    [!] no estas en la posicion exacta!.");
y si coloco asi me funciona correctamente :S:

pawn Код:
if(!IsPlayerInRangeOfPoint(playerid, 2.0, x, y, z) ) return SendClientMessage(playerid, -1, "    [!] no estas en la posicion exacta!.");
el problema esta cuando coloco || , siempre he colocado asi y funcionaba perfectamente o_O

Desde ya muchas Gracias .

PD: me estoy cabreando :P XDDD
Reply
#2

El "||" es para "o" mientras el "&&" es para "y". "!IsPlayerInRangeOfPoint" significa que el jugador no esta "InRangeOfPoint" (lo siento, no hablo mucho espanol ^^). Entonces cuando escribes "if(!IsPlayerInRangeOfPoint(playerid, 2.0, x, y, z) || !IsPlayerInRangeOfPoint(playerid, 2.0, x, y, z) )" tu script entiendes "si el jugador no esta acerca del punto 1 O si no esta acerca del punto 2...", mientras que, si he entendido bien quieras "si el jugador no esta acerca del punto 1 Y no esta acerca del punto 2". Entonces :

pawn Код:
if(!IsPlayerInRangeOfPoint(playerid, 2.0, x, y, z) && !IsPlayerInRangeOfPoint(playerid, 2.0, x, y, z) && !IsPlayerInRangeOfPoint(playerid, 2.0, x, y, z) && !IsPlayerInRangeOfPoint(playerid, 2.0, x, y, z)) return SendClientMessage(playerid, -1, "    [!] no estas en la posicion exacta!.");
Debra funcionar si he entendido correctamente lo que querias hacer
Reply
#3

Probй como lo pusiste de primero y no me diу problemas

Код:
#define Distancia_PJ 2.0
#define Error_1L "[!] no estas en la posicion exacta!."
#define menos_color -1
forward EstaEnPosLala(playerid);
public EstaEnPosLala(playerid)
{
	new Float:x,Float:y,Float:z;
    if(IsPlayerInRangeOfPoint(playerid, Distancia_PJ, x, y, z) 	||
	IsPlayerInRangeOfPoint(playerid, Distancia_PJ, x, y, z) 	||
	IsPlayerInRangeOfPoint(playerid, Distancia_PJ, x, y, z) 	||
	IsPlayerInRangeOfPoint(playerid, Distancia_PJ, x, y, z))
	return 1;
}
public OnPlayerConnect(playerid)
{
	if(EstaEnPosLala(playerid))
	{
	// lala :'3
	} else SendClientMessage(playerid, menos_color, Error_1L);
	return 1;
}
Reply
#4

Ya solucone sacando el ! y colocando un else

asi me funciono siempre, pero lo hago de la forma anterior para abreviar

pawn Код:
if(IsPlayerInRangeOfPoint(playerid, Distancia_PJ, x, y, z)  ||
    IsPlayerInRangeOfPoint(playerid, Distancia_PJ, x, y, z)     ||
    IsPlayerInRangeOfPoint(playerid, Distancia_PJ, x, y, z)     ||
    IsPlayerInRangeOfPoint(playerid, Distancia_PJ, x, y, z))
    {
        //Aca la funcion
    }
    else
    {
        SendClientMessage(playerid, -1, "    [!] no estas en la posicion exacta!.");
    }
bueh lo dejare asi pero no entiendo por ke no funciona ahora o_O.

Muchas Gracias a Todos por sus ayudas.
Reply
#5

El primer cуdigo esta bien, solo que en lugar de '||' pon '&&'.
Lo que hace tu primer cуdigo es:
Si no esta en 10.0, 10.0 y 10.0 no se ejecuta. Y si no esta en 10.0, 10.0 y 11.0 tampoco se ejecuta (porque no puedes estar en dos lugares).
Asн se solucionarнa.
Reply
#6

Quote:
Originally Posted by Bu11Sh0t
Посмотреть сообщение
El primer cуdigo esta bien, solo que en lugar de '||' pon '&&'.
Lo que hace tu primer cуdigo es:
Si no esta en 10.0, 10.0 y 10.0 no se ejecuta. Y si no esta en 10.0, 10.0 y 11.0 tampoco se ejecuta (porque no puedes estar en dos lugares).
Asн se solucionarнa.
¬¬ , pero || es para comprobar si esta en uno o en otra y && es para comprobar si esta en una y en la otra.

•A || B => Retorna "true" si A=true o B=true, de lo contrario retorna "false".
•A && B => Retorna "true" si A=true y B=true, de lo contrario retorna "false".

https://sampforum.blast.hk/showthread.php?tid=225796
Reply
#7

Quote:
Originally Posted by bytytus
Посмотреть сообщение
¬¬ , pero || es para comprobar si esta en uno o en otra y && es para comprobar si esta en una y en la otra.
es correcto, pero al poner ! estas negando el valor de la funciуn asн que al poner esto || estarias comprobando si no esta en uno o en otra y obiamente se cumplirб el if porque no se puede estar en dos lugares al mismo tiempo.
Reply
#8

puff, tenia razon Bu11Sh0t :S XD lo acabo de comprobar, pero ahora me quedo la duda si sera un fallo del operador o del IsPlayerInRangeOfPoint o nada mas ke al combinarse los 2 operadores sucede sustamente lo ke dijo Daniel-92?

por ke si es un fallo podria fallar en futuros, creo.
Reply
#9

Es como ha dicho Daniel. Si comprobas si no estб en un sitio o no estб en el otro, salvo que el rango que pongas llegue a ambos sitios, se cumplirб siempre porque es imposible estar en 2 lugares a la vez.

Es decir, al entrar a uno estarнa saliendo del otro y se cumple la condiciуn.
Reply
#10

Quote:
Originally Posted by [J]ulian
Посмотреть сообщение
Es como ha dicho Daniel. Si comprobas si no estб en un sitio o no estб en el otro, salvo que el rango que pongas llegue a ambos sitios, se cumplirб siempre porque es imposible estar en 2 lugares a la vez.

Es decir, al entrar a uno estarнa saliendo del otro y se cumple la condiciуn.
ah, hay entendi, Gracias .
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)