Geldsystem, spieler erhalten das doppelte Geld beim einloggen

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
  • Morgen, ich sitze schon etwas länger am Geldsystem, jedoch kriege ich es nicht gebacken es zu beheben.
    Wenn sich ein Spieler einloggt, erhält er das doppelte an Geld. Mein Code:


    stock GivePlayerEuro(playerid,euro,cent)
    {
    SpielerDB[playerid][SpielerCent]+=cent;
    if(SpielerDB[playerid][SpielerCent]<0){
    SpielerDB[playerid][SpielerCent]+=100;
    SpielerDB[playerid][SpielerEuro]-=1;
    }
    if(SpielerDB[playerid][SpielerCent]>=100){
    SpielerDB[playerid][SpielerCent]-=100;
    SpielerDB[playerid][SpielerEuro]+=1;
    }
    SpielerDB[playerid][SpielerEuro]+=euro;
    if(SpielerDB[playerid][SpielerCent]<=09){
    new geldtext[64];
    format(geldtext,sizeof(geldtext),"%i,0%i Euro",SpielerDB[playerid][SpielerEuro],SpielerDB[playerid][SpielerCent]);
    PlayerTextDrawSetString(playerid,geld[playerid],geldtext);
    }else{
    new geldtext[64];
    format(geldtext,sizeof(geldtext),"%i,%i Euro",SpielerDB[playerid][SpielerEuro],SpielerDB[playerid][SpielerCent]);
    PlayerTextDrawSetString(playerid,geld[playerid],geldtext);
    }
    }


    Und wenn der Spieler lädt:
    SpielerDB[playerid][SpielerEuro] = cache_get_field_content_int(0,"spielereuro",dbhandle);
    SpielerDB[playerid][SpielerCent] = cache_get_field_content_int(0,"spielercent",dbhandle);
    GivePlayerEuro(playerid,SpielerDB[playerid][SpielerEuro],SpielerDB[playerid][SpielerCent]);


    Ich bedanke mich im vorraus!

  • So laden lassen!
    GivePlayerEuro(playerid,cache_get_field_content_int(0,"spielereuro",dbhandle),cache_get_field_content_int(0,"spielercent",dbhandle));
    Der grund ist einfach, denn du setzt ja die Werte beim laden im enum schon fest
    In der Funktion gibst du nochmal was dazu und somit verdoppelt es sich daher die enum werte auf 0 Setzten und so laden lassen wie mein schnipsel es besagt :thumbup:

    All in all it's just another brick in the wall

  • Dann nimm mal den Code hier
    stock GivePlayerEuro(playerid,euro,cent)
    {
    printf("Eors %d - Cents: %d",euro,cent);
    SpielerDB[playerid][SpielerCent]+=cent;
    if(SpielerDB[playerid][SpielerCent]<0){
    SpielerDB[playerid][SpielerCent]+=100;
    SpielerDB[playerid][SpielerEuro]-=1;
    }
    if(SpielerDB[playerid][SpielerCent]>=100){
    SpielerDB[playerid][SpielerCent]-=100;
    SpielerDB[playerid][SpielerEuro]+=1;
    }
    SpielerDB[playerid][SpielerEuro]+=euro;
    if(SpielerDB[playerid][SpielerCent]<=09){
    new geldtext[64];
    format(geldtext,sizeof(geldtext),"%i,0%i Euro",SpielerDB[playerid][SpielerEuro],SpielerDB[playerid][SpielerCent]);
    PlayerTextDrawSetString(playerid,geld[playerid],geldtext);
    }else{
    new geldtext[64];
    format(geldtext,sizeof(geldtext),"%i,%i Euro",SpielerDB[playerid][SpielerEuro],SpielerDB[playerid][SpielerCent]);
    PlayerTextDrawSetString(playerid,geld[playerid],geldtext);
    }
    return 1;
    }
    Und Poste mir was im Serverlog steht

    All in all it's just another brick in the wall

  • dann habe ich rejoint und habe es wieder verdoppelt bekommen.


    dann sind die enum Werte nicht resettet worden...
    Bei Enums sollte man beim Connect alle resetten da sonst alte Werte übernommen werden und das will ja keiner.


    Daher einfach alles auf 0 Setzen wenn er connected und dann ist das Problem nicht mehr da

    All in all it's just another brick in the wall