Guthaben einzahlen buggt rum

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
  • Halloo zusammen,


    ich bin grad dabei den Dialogteil "Bankguthaben abbuchen" auszuarbeiten und leider ist des aber verbuggt


    egal welche zahl ich eingebe ich bekomme 58,


    habe es schon geprintet das sieht dann so aus



    [16:23:41] GivePlayerMoney(playerid,sInfo[playerid][geld] - input); =
    [16:23:41] sInfo[playerid][karte] += input = 5058 += 58


    hier mal der Befehlsteil
    if(listitem == 1) //Geld abbuchen
    {

    sInfo[playerid][geld] = GetPlayerMoney(playerid);
    SendClientMessage(playerid,RED,"Diese Funktion ist noch nicht verfügbar");
    format(string,sizeof(string),"Bitte gebe deinen Gewünschten Betrag ein, den du abbuchen möchtest!\n Zur Verfügung stehen dir %i",sInfo[playerid][karte]);
    ShowPlayerDialog(playerid,DIALOG_GELD_ABBUCHEN,DIALOG_STYLE_INPUT,"Geld Abbuchen",string,"OK","Abbrechen");
    new input = inputtext[30];//handgeld;
    //if(handgeld <= input) return SendClientMessage(playerid,RED,"Der Eingegebene Betrag entspricht nicht deines Besitzes auf der Hand!");
    GivePlayerMoney(playerid,sInfo[playerid][geld] - input);
    sInfo[playerid][karte] += input;
    printf("GivePlayerMoney(playerid,sInfo[playerid][geld] - input); =%s",sInfo[playerid][geld] - input);
    printf("sInfo[playerid][karte] += input = %i += %i",sInfo[playerid][karte], input);
    return 1;
    }


    es wäre super wenn ihr mir helfen könnt

  • Du kannst mit Timestamps arbeiten.
    Du speicherst den aktuellen Timestamp (gettime()) in einer Variable. Die Variable, mit dem gespeicherten Timestamp, kannst du durch deiner Sekundenzahl addieren.
    Nun fragst du ab, ob der aktuelle Timestamp größer ist, als der abgespeicherte. Wenn dies so ist, dann ist die Zeit noch nicht herum, und der Befehl kann noch nicht ausgeführt werden.

  • Unter die Includes:
    new befehlSperre[MAX_PLAYERS];


    Im Befehl:
    if(befehlSperre[playerid] > gettime()) return SendClientMessage(playerid, 0xFF0000FF, "Du kannst den Befehl noch nicht verwenden.");
    befehlSperre[playerid] = gettime() + (60*MINUTEN_DIE_ER_GESPERRT_SEIN_SOLL);


    Anstatt des Arrays könntest du auch PVars nutzen.


    Andernfalls, aber das ist die weniger schöne Variante, wäre es mit Timern (http://wiki.sa-mp.com/wiki/SetTimerEx) zu arbeiten.

  • okay das klappt. allerdings die bankeinzahl/auszahlfunktion noch nicht


    wenn ich 1€ habe und gebe zum abbuchern 1 ein habe ich 3 auf der hand. gebe ich wieder 1 ein habe ich 9 und dann plötzlich 27


    hier mal das was ich umgebaut habe


    if(listitem == 1) //Geld abbuchen
    {

    sInfo[playerid][geld] = GetPlayerMoney(playerid);
    SendClientMessage(playerid,RED,"Diese Funktion ist noch nicht verfügbar");
    format(string,sizeof(string),"Bitte gebe deinen Gewünschten Betrag ein, den du abbuchen möchtest!\n Zur Verfügung stehen dir %i",sInfo[playerid][karte]);
    ShowPlayerDialog(playerid,DIALOG_GELD_ABBUCHEN,DIALOG_STYLE_INPUT,"Geld Abbuchen",string,"OK","Abbrechen");

    return 1;
    }



    if(dialogid == DIALOG_GELD_ABBUCHEN)
    {
    if(!response) return 1;
    {
    new input = strval(inputtext);

    printf("strval(inputtext) = %i",strval(inputtext));
    //if(handgeld <= input) return SendClientMessage(playerid,RED,"Der Eingegebene Betrag entspricht nicht deines Besitzes auf der Hand!");
    GivePlayerMoney(playerid,sInfo[playerid][geld] - input);
    sInfo[playerid][karte] += input;
    printf("GivePlayerMoney(playerid,sInfo[playerid][geld] - input); =%s",sInfo[playerid][geld] - input);
    printf("sInfo[playerid][karte] += input = %i += %i",sInfo[playerid][karte], input);
    }
    }