Problem bei einer Abfrage

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,


    Und zwar habe ich einen Befehl gemacht wo man sich Pakete kaufen kann.
    Pro Paket werden 150Euro verlangt, jetzt möchte ich gerne eine Abfrage haben. Die Überprüft ob der Spieler noch genug Geld hat?
    Ich hab da schon was versucht aber die Abfrage will nicht, InGame habe ich zwar genug Geld aber er sagt mir " Du hast nicht genügend Geld dabei!"


    if((PlayerDaten[playerid][pGeld] - paketmenge*paketmwst) < 0)return SendClientMessage(playerid,ROT2," Du hast nicht genügend Geld dabei!");


    Woran liegt es?

  • Hey..
    Wäre nett, wenn du mal sagen könntest, was nicht genau funktioniert..
    Außerdem brauchen wir dafür mal ein bisl mehr Code, da man damit kaum was anfangen kann..

    1.) Das habe ich, bitte Text genauer lesen.
    2.) Nein, der Code da oben reicht vollkommen aus. Ich will ja nur wissen was bei der Abfrage falsch ist, da ich genügend InGame Geld habe, er aber trotzdem diese Fehlermeldung absendet!

  • Berechne doch mal den Wert in der abfrage und printe es.
    Vielleicht ist es ja bei der Multiplikation mehr, so dass es in den Minus wert kommt.

    Wenn ich die Abfrage rausnehme. Und den Befehl ausführe.
    Wird mir gesagt wie Viele Pakete und wie Teuer diese sind. Pro Paket halt 150€ bei 2Pakete 300€ also die Rechnung stimmt schonmal.
    Die Abfrage scheint irgendwie Falsch zu sein, nur sehe ich da keinen Fehler :huh:

  • Versuchs so:

    if(PlayerDaten[playerid][pGeld] < (paketmenge*paketmwst))return SendClientMessage(playerid,ROT2," Du hast nicht genügend Geld dabei!");



    ErikSon:
    Ich glaub du hast grad nen denkfehler

    Ne, diese will auch nicht funktionieren.


    Ich Poste einfach mal den Code hier rein:



    ocmd:getpakete(playerid, params[])
    {
    if(PlayerDaten[playerid][pTutorial] == 1)return SendClientMessage(playerid,ORANGE," Du bist noch im Tutorial!");
    if(PlayerDaten[playerid][pLogin] == 0)return SendClientMessage(playerid,ORANGE ," Du bist nicht Eingeloggt!");
    {
    //if(!IsPlayerInRangeOfPoint(playerid,4.0, 1024.2643, -983.5267, 42.6469))return SendClientMessage(playerid,ROT2," Hier kannst du dir keine Pakete besorgen!");
    {
    new string[64], string2[70], paketmenge, paketmwst = 150;
    if(sscanf(params, "d", paketmenge))return SendClientMessage(playerid, ORANGE, "Benutzung: /getpakete [Pro Paket 150$]");
    if(PlayerDaten[playerid][pGeld] >= paketmwst) return SendClientMessage(playerid, DUNKELROT, " Nicht genügend Geld dabei!");
    format(string2, sizeof(string2), " Maximal 20 Pakete, aktuell hast du bei dir %d Pakete!", PlayerDaten[playerid][pProdukte]);
    if(PlayerDaten[playerid][pProdukte] + paketmenge >= 21)return SendClientMessage(playerid,ROT2,string2);
    if(PlayerDaten[playerid][pGeld] < (paketmenge*paketmwst))return SendClientMessage(playerid,ROT2," Du hast nicht genügend Geld dabei!");
    {
    PlayerDaten[playerid][pProdukte] += paketmenge;
    PlayerDaten[playerid][pGeld] -= paketmenge*paketmwst;
    format(string, sizeof(string), "[SYSTEM]: Du hast dir %d Pakete für %d$ gekauft!", paketmenge, paketmenge*paketmwst);
    SendClientMessage(playerid, ORANGE, string);
    new geldanzeige[10];
    format(geldanzeige, sizeof(geldanzeige),"%d", PlayerDaten[playerid][pGeld]);
    TextDrawSetString(Geld[playerid], geldanzeige);
    TextDrawShowForPlayer(playerid, Geld[playerid]);
    SpielerSpeichern(playerid);
    }
    }
    }
    return 1;
    }


  • Mach mal bei IsPlayerInRangeOfPoint die Klammern { und } weg (nur wenn das mit dem // vor isplayerinrangeofpoint richtig ist und net ausversehen war)

  • Da sind ein paar unnötige Klammern..
    Nach einem Semikolen ( nach einer Abfrage ) bringt eine geschweifte Klammer auch nichts ;)


    Außerdem fragst du 2x ab, ob er genug Geld hat, und bei einer Abfrage war es immer noch falsch..


    ocmd:getpakete(playerid, params[]){
    if(PlayerDaten[playerid][pTutorial] == 1)return SendClientMessage(playerid,ORANGE," Du bist noch im Tutorial!");
    if(PlayerDaten[playerid][pLogin] == 0)return SendClientMessage(playerid,ORANGE ," Du bist nicht Eingeloggt!");
    //if(!IsPlayerInRangeOfPoint(playerid,4.0, 1024.2643, -983.5267, 42.6469))return SendClientMessage(playerid,ROT2," Hier kannst du dir keine Pakete besorgen!");
    //{
    new string[64], paketmenge, paketmwst = 150;
    if(sscanf(params, "d", paketmenge))return SendClientMessage(playerid, ORANGE, "Benutzung: /getpakete [Pro Paket 150$]");
    if(PlayerDaten[playerid][pGeld] < (paketmenge*paketmwst)) return SendClientMessage(playerid, DUNKELROT, " Nicht genügend Geld dabei!");
    format(string, sizeof(string), " Maximal 20 Pakete, aktuell hast du bei dir %d Pakete!", PlayerDaten[playerid][pProdukte]);
    if(PlayerDaten[playerid][pProdukte] + paketmenge >= 21)return SendClientMessage(playerid,ROT2,string);
    PlayerDaten[playerid][pProdukte] += paketmenge;
    PlayerDaten[playerid][pGeld] -= (paketmenge*paketmwst);
    format(string, sizeof(string), "[SYSTEM]: Du hast dir %d Pakete für %d$ gekauft!", paketmenge, paketmenge*paketmwst);
    SendClientMessage(playerid, ORANGE, string);
    new geldanzeige[10];
    format(geldanzeige, sizeof(geldanzeige),"%d", PlayerDaten[playerid][pGeld]);
    TextDrawSetString(Geld[playerid], geldanzeige);
    TextDrawShowForPlayer(playerid, Geld[playerid]);
    SpielerSpeichern(playerid);
    //}
    return 1;
    }