IsPlayerInArea no funciona :|
#1

Hola primeramente tengo este cуdigo:

pawn Код:
IsPlayerInArea(playerid, Float:MinX, Float:MinY, Float:MaxX, Float:MaxY)
{
    new Float:X, Float:Y, Float:Z;

    GetPlayerPos(playerid, X, Y, Z);
    if(X >= MinX && X <= MaxX && Y >= MinY && Y <= MaxY) {
        return 1;
    }
    return 0;
}
stock EnZonaSegura(playerid)
{
    if(IsPlayerInArea(playerid, 1827.987, -1449.987, 1715.987, -1323.987 ) == 1 ||
    IsPlayerInArea(playerid, 2245.995, -1215.599, 2175.995, -1145.599 ) == 1 ||
    IsPlayerInArea(playerid, 1100.171, -1994.005, 1296.171, -2078.005 ) == 1 ||
    IsPlayerInArea(playerid, 1297.161, -831.044, 1227.161, -775.044 ) == 1 ||
    IsPlayerInArea(playerid, 156.809, 1945.068, 282.809, 1833.068 ) == 1 ||
    IsPlayerInArea(playerid, -1889.145, 351.053, -2001.145, 589.053 ) == 1 ||
    IsPlayerInArea(playerid, 2888.435, 844.508, 2776.435, 1012.508 ) == 1 ||
    IsPlayerInArea(playerid, 2736.047, -1069.794, 2624.047, -1167.794 ) == 1 ||
    IsPlayerInArea(playerid, 2437.847, -1628.469, 2535.847, -1726.469 ) == 1 )
    {
        return 1;
    }
    return 0;
}
lo que sucede es quй cuando utilizo:
EnZonaSegura(playerid)
siempre retorna 0 y estoy en la zona, lose porquй tambien las hice con gangzones:

pawn Код:
SZ1 = GangZoneCreate( 1827.987, -1449.987, 1715.987, -1323.987 );
    SZ2 = GangZoneCreate( 2245.995, -1215.599, 2175.995, -1145.599 );
    SZ3 = GangZoneCreate( 1100.171, -1994.005, 1296.171, -2078.005 );
    SZ4 = GangZoneCreate( 1297.161, -831.044, 1227.161, -775.044 );
    SZ5 = GangZoneCreate( 156.809, 1945.068, 282.809, 1833.068 );
    SZ6 = GangZoneCreate( -1889.145, 351.053, -2001.145, 589.053 );
    SZ7 = GangZoneCreate( 2888.435, 844.508, 2776.435, 1012.508 );
    SZ8 = GangZoneCreate( 2736.047, -1069.794, 2624.047, -1167.794 );
    SZ9 = GangZoneCreate( 2437.847, -1628.469, 2535.847, -1726.469 );
Alguna idea de porquй no funciona?

La utilizo asi:
pawn Код:
if(EnZonaSegura(playerid) == 1)
{
//ejecutar funcion
}
pero siempre retorna 0
Reply
#2

Intenta de esta forma:

pawn Код:
IsPlayerInArea(playerid, Float:MinX, Float:MinY, Float:MaxX, Float:MaxY)
{
    new Float:X, Float:Y, Float:Z;
    GetPlayerPos(playerid, X, Y, Z);
   
    if(X >= MinX && X <= MaxX && Y >= MinY && Y <= MaxY) return 1;
    else return 0;
}
stock EnZonaSegura(playerid)
{
    if(IsPlayerInArea(playerid, 1827.987, -1449.987, 1715.987, -1323.987)) return 1;
    else if(IsPlayerInArea(playerid, 2245.995, -1215.599, 2175.995, -1145.599)) return 1;
    else if(IsPlayerInArea(playerid, 1100.171, -1994.005, 1296.171, -2078.005)) return 1;
    else if(IsPlayerInArea(playerid, 1297.161, -831.044, 1227.161, -775.044)) return 1;
    else if(IsPlayerInArea(playerid, 156.809, 1945.068, 282.809, 1833.068)) return 1;
    else if(IsPlayerInArea(playerid, -1889.145, 351.053, -2001.145, 589.053)) return 1;
    else if(IsPlayerInArea(playerid, 2888.435, 844.508, 2776.435, 1012.508)) return 1;
    else if(IsPlayerInArea(playerid, 2736.047, -1069.794, 2624.047, -1167.794)) return 1;
    else if(IsPlayerInArea(playerid, 2437.847, -1628.469, 2535.847, -1726.469)) return 1;
    else return 0;
}
Reply
#3

Quote:
Originally Posted by EnzoMetlc
Посмотреть сообщение
Intenta de esta forma:

pawn Код:
IsPlayerInArea(playerid, Float:MinX, Float:MinY, Float:MaxX, Float:MaxY)
{
    new Float:X, Float:Y, Float:Z;
    GetPlayerPos(playerid, X, Y, Z);
   
    if(X >= MinX && X <= MaxX && Y >= MinY && Y <= MaxY) return 1;
    else return 0;
}
stock EnZonaSegura(playerid)
{
    if(IsPlayerInArea(playerid, 1827.987, -1449.987, 1715.987, -1323.987)) return 1;
    else if(IsPlayerInArea(playerid, 2245.995, -1215.599, 2175.995, -1145.599)) return 1;
    else if(IsPlayerInArea(playerid, 1100.171, -1994.005, 1296.171, -2078.005)) return 1;
    else if(IsPlayerInArea(playerid, 1297.161, -831.044, 1227.161, -775.044)) return 1;
    else if(IsPlayerInArea(playerid, 156.809, 1945.068, 282.809, 1833.068)) return 1;
    else if(IsPlayerInArea(playerid, -1889.145, 351.053, -2001.145, 589.053)) return 1;
    else if(IsPlayerInArea(playerid, 2888.435, 844.508, 2776.435, 1012.508)) return 1;
    else if(IsPlayerInArea(playerid, 2736.047, -1069.794, 2624.047, -1167.794)) return 1;
    else if(IsPlayerInArea(playerid, 2437.847, -1628.469, 2535.847, -1726.469)) return 1;
    else return 0;
}
Si lo intente asi primero pero no funcionaba .-. xd mejor use areas dinamicas..
asн que Problema resuelto xd
Reply
#4

es por que tienes mal el IsPlayerInArea.

tuyo

Код:
IsPlayerInArea(playerid, Float:MinX, Float:MinY, Float:MaxX, Float:MaxY)
{
    new Float:X, Float:Y, Float:Z;

    GetPlayerPos(playerid, X, Y, Z);
    if(X >= MinX && X <= MaxX && Y >= MinY && Y <= MaxY) {
        return 1;
    }
    return 0;
}
mio ( la forma correcta)
Код:
stock IsPlayerInArea(playerid, Float:minx, Float:maxx, Float:miny, Float:maxy)
{
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    if (x > minx && x < maxx && y > miny && y < maxy) return 1;
    return 0;
}
---> [Tutorial] IsPlayerInArea By OTACON

para verificar tantos IsPlayerInArea utiliza la forma que ya te dijo enzo.


https://sampwiki.blast.hk/wiki/Areacheck



PD: es recomendable utilizar streamer.

saludos.

EDIT: enzo ese else esta mal, por logica si el stock tiene un return 0; y la funcion de adentro retorna en false va a retonar el return del stock de lo contrario retonara el return de la funcion de adentro.

Reply
#5

Quote:
Originally Posted by OTACON
Посмотреть сообщение
es por que tienes mal el IsPlayerInArea.

tuyo

Код:
IsPlayerInArea(playerid, Float:MinX, Float:MinY, Float:MaxX, Float:MaxY)
{
    new Float:X, Float:Y, Float:Z;

    GetPlayerPos(playerid, X, Y, Z);
    if(X >= MinX && X <= MaxX && Y >= MinY && Y <= MaxY) {
        return 1;
    }
    return 0;
}
mio ( la forma correcta)
Код:
stock IsPlayerInArea(playerid, Float:minx, Float:maxx, Float:miny, Float:maxy)
{
    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid, x, y, z);
    if (x > minx && x < maxx && y > miny && y < maxy) return 1;
    return 0;
}
---> [Tutorial] IsPlayerInArea By OTACON

para verificar tantos IsPlayerInArea utiliza la forma que ya te dijo enzo.


https://sampwiki.blast.hk/wiki/Areacheck



PD: es recomendable utilizar streamer.

saludos.

EDIT: enzo ese else esta mal, por logica si el stock tiene un return 0; y la funcion de adentro retorna en false va a retonar el return del stock de lo contrario retonara el return de la funcion de adentro.

Ah LOL, No me habia fijado en eso de arriba, XD, pero bueno creo que es mejor utilizar CreateDynamicRectangle xD
Reply
#6

No va a funcionar porque estas usando "min" en "max" y "max" en "min": IsPlayerInArea(playerid, 1827.987, -1449.987, 1715.987, -1323.987)

Si no quieres complicarte mucho, una soluciуn fбcil serнa:

if(MinX > MaxX)
{
new Float:temp = MaxX;
MaxX = MinX;
MinX = temp;
}

if(MinY > MaxY)
{
new Float:temp = MaxY;
MaxY = MinY;
MinY = temp;
}
Reply
#7

La funcion esta bien, las coordenadas son en base al gangzonecreate me imagino..

(Float:minx, Float:miny, Float:maxx, Float:maxy)
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)