Problem mit For Schleife, Array (Kordinaten)

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
  • Ich habe ein Problem undzwar, Ich habe in einem Array verschiedene Kordinaten gespeichert.
    Alles schön und gut bloß, wenn ich eine Abfrage mache, ob der Spieler vor einem ATM steht, zeigt er mir jedesmal die Fehlermeldung an, dass Ich vor keinem ATM stehe, außer bei einem der sich bei dem Spawn befindet.


    Ich bin echt verwirrt, finde den Fehler einfach nicht.
    Hoffe jemand kann mir behilflich sein.


    Mein Code:
    for(new Kord = 0; Kord < sizeof(ATMs); Kord++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 7.0, ATMs[Kord][0], ATMs[Kord][1], ATMs[Kord][2]))
    {
    // Dialog anzeigen
    } else {
    SendClientMessage(playerid, GRAU, "Du bist an keinem Bankautomaten.");
    }
    break;
    }


    new Float:ATMs[11][3] = {
    {393.0718, -2053.2590, 7.8359},
    {999.5446, -921.3535, 42.1797},
    {1193.9045, -917.4368, 43.1644},
    {1187.1493, -1368.5099, 13.5536},
    {-79.7017, -1170.6952, 2.1561},
    {1464.7659, -1748.8936, 15.4453},
    {1929.3857, -1771.2517, 13.5469},
    {2232.4226, -1161.5313, 25.8906},
    {2389.2200, -1247.7371, 24.2500},
    {1790.7551, -1882.7056, 13.5691},
    {2352.6660, -1508.3578, 24.0000}
    };

  • new bool:no;
    for(new Kord = 0; Kord < sizeof(ATMs); Kord++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 7.0, ATMs[Kord][0], ATMs[Kord][1], ATMs[Kord][2])){
    no = false;
    break;
    }else no = true;
    }
    if(no)return SendClientMessage(playerid, GRAU, "Du bist an keinem Bankautomaten.");


    Du darfst die schleife auch nicht nach der ersten if abfrage abbrechen lassen und durch die Nachricht in der For-schleife bezweckst du nur spam

  • Ich erkläre dir mal ein bisschen an deinem Code, was du tust.



    for(new Kord = 0; Kord < sizeof(ATMs); Kord++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 7.0, ATMs[Kord][0], ATMs[Kord][1], ATMs[Kord][2])) //Bis hierher: Du hast das Grundprinzip verstanden, ist aber nicht ganz richtig danach.
    {
    // Dialog anzeigen
    } else {
    SendClientMessage(playerid, GRAU, "Du bist an keinem Bankautomaten."); //Du würdest gespamt werden mit "Du bist an keinem Bankautomat"
    }
    break; //Das break; macht, dass die Schleife SOFORT beendet wird. Also kommt er immer nur bis zu den ersten Coords im Array.
    }


    Pack das ganze in abgeänderter Form in ein Stock (z.B. IsPlayerAtATM). Anstatt, dass du dem Spieler Nachrichten, oder den Dialog zeigst arbeitest du mit return 1/0.


    Also:



    stock IsPlayerAtATM(playerid)
    {
    for(new Kord = 0; Kord < sizeof(ATMs); Kord++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 7.0, ATMs[Kord][0], ATMs[Kord][1], ATMs[Kord][2]))
    {
    return 1;
    }
    }
    return 0;
    }


    Hoffe ich konnte helfen,
    UncleSub