Tankstellen Positionen stimmen nicht

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
  • Liebe Community,
    ich arbeite zurzeit an einem Dynamischen Tankstellen System und bin gerade dabei einen Kauf Befehl für die Tankstelle zu machen.
    Allerdings taucht ein Fehler auf der eigentlich garnicht da sein darf, er sagt mir das ich an keiner Tankstelle bin obwohl ich an einer Tankstelle bin.

    Hier mal der Befehl:


    dcmd_BuyTankstelle(playerid, params[])
    {
    #pragma unused params
    for(new ti = 0; ti < MAX_TANKSTELLEN; ti++)
    {
    new dataFile[256], Float:tX, Float:tY, Float:tZ;
    format(dataFile, sizeof(dataFile),"/Tankstellen/TS_%d.ini", ti);
    tX = dini_Float(dataFile, "tX");
    tY = dini_Float(dataFile, "tY");
    tZ = dini_Float(dataFile, "tZ");
    if(!IsPlayerInRangeOfPoint(playerid, 3.0, tX, tY, tZ)) return SendClientMessage(playerid, COLOR_RED, "Du bist an keiner Tankstelle!");
    if(tInfo[ti][tInBesitz] == 1) return SendClientMessage(playerid, COLOR_RED, "Diese Tankstelle ist nicht zu verkaufen!");
    if(GetPlayerMoney(playerid) < tInfo[ti][tPreis]) return SendClientMessage(playerid, COLOR_RED, "Du hast nicht genug Geld!");
    dini_IntSet(dataFile, "tInBesitz", 1);
    dini_Set(dataFile, "tInhaber", getName(playerid));
    GivePlayerMoney(playerid, - tInfo[ti][tPreis]);
    SendClientMessage(playerid, COLOR_RED, "Du hast dir erfolgreich eine Tankstelle gekauft!");
    SendClientMessage(playerid, COLOR_WHITE, "Du kannst sie mit /TSV verwalten.");
    UpdateTankstelle(ti);
    }
    return 1;
    }


    Lg,
    Jay Escobar


  • wie werden tanken erstelölt? bzw. geladen?


    Hat damit doch nichts zutun, da die Tankstellen mit dem 3DText an der richtigen Position sind.

  • Habe nun mal tX, tY und tZ geprinted und habe gesehen das alle 3 auf 0.000 stehen, dann habe ich geschaut ob die Datei überhaupt existiert & sie existiert nicht, das heisst für mich das der Fehler in der Schleife liegen muss...
    Allerdings komme ich damit immer noch nicht weiter :S.

  • Ok, dann erklär ich mal den Fehler.
    Du benutzt im Befehl eine Schleife.Bei jedem Durchgang überprüfst du, ob der Spieler in der nähe einer Tankstelle ist. Ist er nicht in der nähe einer Tankstellen, beendest du die Schleife bzw den Befehl mit einem return. Heisst also,wenn beim 1 Durchgang der Schleife NICHT die passende Tankstelle gefunden wurde,wird immer die Meldung "Nicht in der nähe einer Tankstelle ausgegeben".


    Du müsstest den Teil mit der Schleife + Positionsüberprüfung zuerst machen und DANACH an Hand der korrekten tankstelle den Rest ( Kauf usw. ).

    new tankstelle = -1; // -1 damit markieren wir als ungültig bzw kein Treffer.
    for(new ti = 0; ti < MAX_TANKSTELLEN; ti++)
    {
    new dataFile[256], Float:tX, Float:tY, Float:tZ;
    format(dataFile, sizeof(dataFile),"/Tankstellen/TS_%d.ini", ti);
    tX = dini_Float(dataFile, "tX");
    tY = dini_Float(dataFile, "tY");
    tZ = dini_Float(dataFile, "tZ");
    if( IsPlayerInRangeOfPoint(playerid, 3.0, tX, tY, tZ)) { // Achtung, ! Entfernt.
    tankstelle = i;
    }
    }
    if( tankstelle == -1 ) {
    // Wir haben keine Tankstelle gefunden!
    return 1;
    }
    // Den Rest ab hier abwickeln an "tankstelle".

    Verständlich,oder ;-O ?


    Vorausgesetzt die Dateien existieren und es werden korrekte Daten ausgelesen ;).


    //Edit: Eventuell beginnen bei dir die Tankstellen erst bei /Tankstellen/TS_1.ini und nicht 0 ;) ?

  • Ich danke dir, es klappt nun ;-).
    Werde demnächst besser auf meine Schleifen achten :b.