Hallo,
das IsPlayerInArea funktioniert bei mir merkwürdigerweise nicht. Hier die Coords wie ich sie abgespeichert habe:
AddStaticVehicle(411,1015.2937,-940.8803,41.9224,97.1551,1,1);
AddStaticVehicle(411,994.0790,-932.8064,41.9440,95.4403,1,1);
Und dies ist die funktion:
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 true;
return false;
}
Möchte ich nun mittels
IsPlayerInArea(playerid, 1015.2937, 994.0790, -940.8803, -932.8064)
abfragen, ob der Spieler nun in genau diesen Coords steht kommt der Debug "Spieler steht nicht an der Position".(Zum Debuggen hab ich das reingeschrieben mit printf wird es ausgegeben.)
Entweder ich bin zu doof oder irgendwas stimmt da nicht, daher würde ich mich freuen, wenn mir jemand helfen könnte. Vielen Dank.
IsPlayerInArea funktioniert nicht
- HandsUpFreak
- Geschlossen
- Erledigt
-
-
Du musst "kleiner-gleich" bzw "größer-gleich" benutzen, wenn die Koordinaten gleichzeitig zur Begrenzung dienen
-
Wie meinst du das?
//Edit meinst du so?
<= -
Schau dir die Zeile an:
if (x > minx && x < maxx && y > miny && y < maxy) return true;Wenn du als äußere Begrenzung folgende Koordinate hast: 1015.2937
Aber folgende Koordinate überprüfen willst: 1015.2937
siehst du, dass beide gleich groß sind.Da die Funktion aber nur prüft, ob die Koordinate größer/kleiner als die Begrenzung ist, wird false zurückgegeben.
<= bzw >= sind die Operatoren, die du in der IsPlayerInArea-Funktion benutzen müsstest, damit true zurückgegeben wird.
-
Ok, so sieht der Code aus:
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 true;
return false;
}
Ich hab das ganze mal geprintet mit:
printf("Area: %f, %f, %f, %f",minX, maxX, minY, maxY);
printf("Spieler: %f, %f",x, y);Das kam raus:
Wie man ganz unschwer erkennen kann ist bei Spieler die erste Coord die X und die 2. das Y.
Bei der Area sind die ersten beiden X und die letzten beiden Y. Wenn man richtig hinschaut sieht man, dass der Spieler eigentlich drin steht. Das wird aber nicht angezeigt und gibt mir false zurück. -
Die Min-Koordinaten sind größer als die Max-Koordinaten - ich weiß nicht ob es daran liegt, aber es könnte ein Problem darstellen. Vertausch die jeweils mal, so dass es passt.
-
Area: 994.078979, 1015.293701, -932.806396, -940.880310
Spieler: 1002.087829, -939.329650
Leider ebenfalls ein false... -
bei den Area Teilen, oder auch bei GangZones bietet sich das hier sehr gut an:
http://forum.sa-mp.com/showthread.php?t=372
einfach gewünsche Map stelle auswählen, und er gibt dir Automatisch die min & max x und y Achsen aus. einfach mal probieren..
-
Area: 994.078979, 1015.293701, -940.880310, -932.806396
Spieler: 1002.087829, -939.329650Versuchs mal so.
-
bei den Area Teilen, oder auch bei GangZones bietet sich das hier sehr gut an:http://forum.sa-mp.com/showthread.php?t=372
einfach gewünsche Map stelle auswählen, und er gibt dir Automatisch die min & max x und y Achsen aus. einfach mal probieren..
Ich möchte sehr kleine Gebiete festlegen, das Tool ist mir zu "grob".
Area: 994.078979, 1015.293701, -940.880310, -932.806396
Spieler:1002.087829, -939.329650Versuchs mal so.
Probiert:
Area: 994.078979, 1015.293701, -940.880310, -932.806396
Spieler: 1008.535339, -939.449829
Wieder ein false... -
Das kann aber nicht sein, ich habe grad folgenden Pseudocode benutzt und mir wurde ein true zurückgegeben...
stock IsPlayerInArea(playerid, Float:minx, Float:maxx, Float:miny, Float:maxy) {
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
x=1008.535339;
y=-939.449829;
if(x>minx) print("x>minx");
if(x<maxx) print("x<maxx");
if(y>miny) print("y>miny");
if(y<maxy) print("y<maxy");
if (x > minx && x < maxx && y > miny && y < maxy) return true;
return false;
}printf("%i",IsPlayerInArea(0,994.078979, 1015.293701, -940.880310, -932.806396));
[14:39:41] x>minx
[14:39:41] x<maxx
[14:39:41] y>miny
[14:39:41] y<maxy
[14:39:41] 1Sicher, dass dein Problem an der Funktion liegt?
-
breadfish.de
Hat das Thema geschlossen.