Frage zu IsPlayerInRangeOfPoint

Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Hallo,


    ich arbeite gerade an einem Bankautomaten-System und habe ein paar Probleme beim Befehl den man dann vor den Bankautomaten eingeben soll (/bank).


    Vorweg:
    Ich habe die Koordinaten der Bankautomaten in einem Enum.
    enum bankatmEnum{
    Float:b_x,
    Float:b_y,
    Float:b_z,
    Float:b_ix,
    Float:b_iy,
    Float:b_iz,
    }


    new bInfo[][bankatmEnum] = {
    {1497.78687, -1667.63672, 13.63980, 0.00000, 0.00000, 0.00000},
    {1498.10352, -1749.91284, 15.08645, 0.00000, 0.00000, 178.37987},
    {1102.28088, -1438.31360, 15.38859, 0.00000, 0.00000, -269.75983},
    {1154.77148, -1456.05713, 15.42300, 0.00000, 0.00000, 271.08020}
    };


    Und lasse sie beim Laden des Gamemodes erstellen:
    for(new i=0; i<sizeof(bInfo); i++)
    {
    CreateDynamicObject(2942,bInfo[i][b_x],bInfo[i][b_y],bInfo[i][b_z],bInfo[i][b_ix],bInfo[i][b_iy],bInfo[i][b_iz]);
    Create3DTextLabel("Benutze: {FF0000}/bank{FFFF00}\num in das Bankmenü zu kommen",LABEL_COLOR,bInfo[i][b_x],bInfo[i][b_y],bInfo[i][b_z],15,0,0);
    }

    Das klappt auch wunderbar.


    Nun möchte ich beim Befehl: /bank erst abfragen ob sich ein Bankautomat in der Nähe befindet.


    Ich habe das bisher so gemacht aber es funktioniert nicht ganz:


    ocmd:bank(playerid,params[])
    {
    for(new i=0; i<sizeof(bInfo); i++)
    {
    if (IsPlayerInRangeOfPoint(playerid,10.00,bInfo[i][b_x],bInfo[i][b_y],bInfo[i][b_z]))
    {
    ShowPlayerDialog(playerid,DIALOG_BANK,2,"Bankmenü","Einzahlen\nAuszahlen\nKontostand","OK","Abbrechen");
    return 1;
    }


    else


    {
    SendClientMessage(playerid, ROT, "Fehler: Es ist kein Bankautomat in der Nähe!");
    return 1;
    }
    }
    return 1;
    }


    Es funktioniert nur beim ersten Bankautomat der in der Liste steht. Bei allen anderen kommt die Fehlermeldung (Fehler: Es ist kein Bankautomat in der Nähe)
    Wie kann man erreichen das es bei allen Bankautomaten funktioniert?

  • Ich denke das dein return 1; in dem else die Schleife unterbricht, wodurch nicht weiter gezählt wird.
    Versuch es mal so, vielleicht klappt es ja :rolleyes: (Hab es natürlich nicht getestet^^)
    ocmd:bank(playerid,params[])
    {
    for(new i=0; i<sizeof(bInfo); i++)
    {
    if(IsPlayerInRangeOfPoint(playerid,10.00,bInfo[i][b_x],bInfo[i][b_y],bInfo[i][b_z]))
    {
    ShowPlayerDialog(playerid,DIALOG_BANK,2,"Bankmenü","Einzahlen\nAuszahlen\nKontostand","OK","Abbrechen");
    return 1;
    }
    }
    SendClientMessage(playerid, ROT, "Fehler: Es ist kein Bankautomat in der Nähe!");
    return 1;
    }