Hallo,
Ungefähr so sieht das ganze bisher aus:
enum zollinfo
{
zModelID,
zText[32],
zPreis,
Float:zToPosX,
Float:zToPosY,
Float:zToPosZ,
Float:zPosX,
Float:zPosY,
Float:zPosZ,
Float:zPosRotX,
Float:zPosRotY,
Float:zPosRotZ,
}
new ZollAmt[][zollinfo] =
{
{978, "Gute Fahrt!",500, 52.0, -1539.19921875, 0.0, 52.0, -1539.19921875, 5.0533084869385, 0.0, 0.0, 79.991455078125},
{978, "Gute Fahrt!",500, 54.19921875, -1524.5, 0.0, 54.19921875, -1524.5, 4.9744849205017, 0.0, 0.0, 261.98547363281}
}
Die Abfrage lautet bisher so:
if(strcmp(strget(cmdtext,0),"/zoll", true) ==0)
{
for(new zoll = 0; zoll < sizeof(ZollAmt); zoll++)
{
if(!IsPlayerInRangeOfPoint(playerid, 15, ZollAmt[zoll][zPosX], ZollAmt[zoll][zPosY], ZollAmt[zoll][zPosZ])) continue;
if(GetPlayerMoney(playerid) < ZollAmt[zoll][zPreis]) return SendClientMessage(playerid, 0xFFFFFF00, "Zu wenig Geld mit dir dabei!");
GivePlayerMoney(playerid, -ZollAmt[zoll][zPreis]);
GameTextForPlayer(playerid, ZollAmt[zoll][zText], 2500, 3);
MoveObject(ZollObject[zoll], ZollAmt[zoll][zToPosX], ZollAmt[zoll][zToPosY], ZollAmt[zoll][zToPosZ], 3.5);
SetTimerEx("SetZollBack", 3500, 0, "d", zoll);
return 1;
}
return SendClientMessage(playerid, 0xFFFFFF00, "Nicht in der Nähe eines Zollamtes!");
}
Das funktioniert alles super, aber wenn man zu nah an einer der beiden Zollschranken ist, dann wird die andere Zollschranke angesprochen.
Jetzt hab ich mir gedacht, man könnte irgendwie die tatsächliche Distanz zwischen Spieler und dem Object abfragen ( nicht nur InRangeOfPoint ) und dann diese mit dem zweiten Wert vergleichen. Je nachdem, wo man näher dran ist, solte die Zollschranke "angesprochen" werden.
Kennt einer eine Lösung für mein Problem?
Ich hab zwar schon gegoogelt, aber ich bin bisher auf nichts hilfreiches gestoßen.
Mfg Joooo