Levelsystem geht nicht richtig.

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


    habe ein kleines problem mit meinem Levelsystem...
    man bekommt durch ein Timer 1 Exp pro Stunde womit man sich dann ein LevelUp kaufen kann. Das geht auch alles InGame super auch im Skript finde ich keine fehler..


    Alle daten Exp Points und level selbst werden in der DINI gespeichert, aber wenn ich mich erneut einlogge sind diese wieder weg.
    Ich hoffe ihr könnt mir helfen..

    Grüße,


    Kaffeepause.

    Wenn das Leben dir eine Zitrone gibt, frag nach Salz und Tequila!

  • Sorry, vergessen..
    stock loadprofil(playerid)
    {
    new pname[MAX_PLAYERS],accFormat[128];
    GetPlayerName(playerid,pname,sizeof pname);
    format(accFormat,sizeof accFormat,"%s.kaffee",pname);
    SetPlayerSkin(playerid, dini_Int(accFormat,"skin"));
    GivePlayerMoney(playerid, dini_Int(accFormat,"money"));
    Spieler[playerid][exp] = dini_Int(accFormat,"exp");
    Spieler[playerid][age] = dini_Int(accFormat,"age");
    Spieler[playerid][sex] = dini_Int(accFormat,"sex");
    Spieler[playerid][fraktion] = dini_Int(accFormat,"fraktion");
    Spieler[playerid][rang] = dini_Int(accFormat,"rang");
    Spieler[playerid][alevel] = dini_Int(accFormat,"alevel");
    Spieler[playerid][lastx] = dini_Float(accFormat,"lastx");
    Spieler[playerid][lasty] = dini_Float(accFormat,"lasty");
    Spieler[playerid][lastz] = dini_Float(accFormat,"lastz");
    SetPlayerScore(playerid,dini_Int(accFormat,"level"));
    return 1;
    }

    Grüße,


    Kaffeepause.

    Wenn das Leben dir eine Zitrone gibt, frag nach Salz und Tequila!

  • stock saveuser(playerid)
    {
    new pname[MAX_PLAYERS],accFormat[128];
    GetPlayerName(playerid,pname,sizeof pname);
    format(accFormat,sizeof accFormat, "%s.kaffee",pname);
    if(fexist(accFormat) && Spieler[playerid][eingeloggt])
    {
    dini_IntSet(accFormat,"level",GetPlayerScore(playerid));
    dini_IntSet(accFormat,"exp",Spieler[playerid][exp]);
    dini_IntSet(accFormat,"skin",GetPlayerSkin(playerid));
    dini_IntSet(accFormat,"money",GetPlayerMoney(playerid));
    dini_IntSet(accFormat,"age",Spieler[playerid][age]);
    dini_IntSet(accFormat,"sex",Spieler[playerid][sex]);
    dini_IntSet(accFormat,"fraktion",Spieler[playerid][fraktion]);
    dini_IntSet(accFormat,"rang",Spieler[playerid][rang]);
    dini_IntSet(accFormat,"alevel",Spieler[playerid][alevel]);
    dini_FloatSet(accFormat,"lastx",Spieler[playerid][lastx]);
    dini_FloatSet(accFormat,"lasty",Spieler[playerid][lasty]);
    dini_FloatSet(accFormat,"lastz",Spieler[playerid][lastz]);
    }
    }


    Und ja es wird die EXP anzahl und das Level in der DINI gespeichert..
    Nur sobald ich mich wieder einlogge ist diese alles wieder auf null ö.ö

    Grüße,


    Kaffeepause.

    Wenn das Leben dir eine Zitrone gibt, frag nach Salz und Tequila!

  • Ehrlich gesagt finde ich da jetzt nicht direkt einen Fehler.


    Nutz mal die Stocks und poste was er Printed:


    stock loadprofil(playerid)
    {
    new pname[MAX_PLAYERS],accFormat[128];
    GetPlayerName(playerid,pname,sizeof pname);
    format(accFormat,sizeof accFormat,"%s.kaffee",pname);
    SetPlayerSkin(playerid, dini_Int(accFormat,"skin"));
    GivePlayerMoney(playerid, dini_Int(accFormat,"money"));
    Spieler[playerid][exp] = dini_Int(accFormat,"exp");
    Spieler[playerid][age] = dini_Int(accFormat,"age");
    Spieler[playerid][sex] = dini_Int(accFormat,"sex");
    Spieler[playerid][fraktion] = dini_Int(accFormat,"fraktion");
    Spieler[playerid][rang] = dini_Int(accFormat,"rang");
    Spieler[playerid][alevel] = dini_Int(accFormat,"alevel");
    Spieler[playerid][lastx] = dini_Float(accFormat,"lastx");
    Spieler[playerid][lasty] = dini_Float(accFormat,"lasty");
    Spieler[playerid][lastz] = dini_Float(accFormat,"lastz");
    SetPlayerScore(playerid,dini_Int(accFormat,"level"));
    printf("loadprofil(exp: %d, level: %d)", dini_Int(accFormat,"exp"), dini_Int(accFormat,"level"));
    return 1;
    }


    stock saveuser(playerid)
    {
    new pname[MAX_PLAYERS],accFormat[128];
    GetPlayerName(playerid,pname,sizeof pname);
    format(accFormat,sizeof accFormat, "%s.kaffee",pname);
    if(fexist(accFormat) && Spieler[playerid][eingeloggt])
    {
    dini_IntSet(accFormat,"level",GetPlayerScore(playerid));
    dini_IntSet(accFormat,"exp",Spieler[playerid][exp]);
    dini_IntSet(accFormat,"skin",GetPlayerSkin(playerid));
    dini_IntSet(accFormat,"money",GetPlayerMoney(playerid));
    dini_IntSet(accFormat,"age",Spieler[playerid][age]);
    dini_IntSet(accFormat,"sex",Spieler[playerid][sex]);
    dini_IntSet(accFormat,"fraktion",Spieler[playerid][fraktion]);
    dini_IntSet(accFormat,"rang",Spieler[playerid][rang]);
    dini_IntSet(accFormat,"alevel",Spieler[playerid][alevel]);
    dini_FloatSet(accFormat,"lastx",Spieler[playerid][lastx]);
    dini_FloatSet(accFormat,"lasty",Spieler[playerid][lasty]);
    dini_FloatSet(accFormat,"lastz",Spieler[playerid][lastz]);
    printf("saveuser(exp: %d, level: %d)", Spieler[playerid][exp], GetPlayerScore(playerid));
    }
    return 1;
    }

  • Evtl. hast du deine resetPlayer() Methode an einer falschen Stelle.
    Sprich, villeicht, wird dein resetPlayer() vor dem Speichern, oder vor dem Laden aufgerufen?


    Oder du liest gar nicht Spieler[playerid][exp] aus, sondern hast iwo nen Tippfehler/CopyAndPaste Fehler?
    Das kommt oft vor, wenn man zu faul zum Schreiben ist und sich alles von anderen Methoden im Script kopiert :D


    Schonmal gecheckt?

  • Zitat

    [13:11:33] [connection] 127.0.0.1:53652 requests connection cookie.
    [13:11:34] Incoming connection: 127.0.0.1:53652 id: 0
    [13:11:34] [join] Kaffeepause. has joined the server (0:127.0.0.1)
    [13:11:36] loadprofil(exp: 8, level: 2)
    [13:12:09] saveuser(level: 2, exp: 9)
    [13:12:09] [part] Kaffeepause. has left the server (0:1)

    Gespeichert werden sie nur wird beim Login nix mehr geladen.


    Nix da Copy&Past ;)
    alles aus tut's und selbst geschrieben man will ja was lernen.


    Und ne wird alles gleich gesichert wie die anderen daten die er ja auch alle ohne probleme lädt.

    Grüße,


    Kaffeepause.

    Wenn das Leben dir eine Zitrone gibt, frag nach Salz und Tequila!

  • enum spieler_daten
    {
    level,
    exp,
    skin,
    alevel,
    age,
    sex,
    money,
    fraktion,
    rang,
    Float:lastx,Float:lasty,Float:lastz,
    eingeloggt
    }
    new Spieler[MAX_PLAYERS][spieler_daten];


    und ja ist mit dabei.

    Grüße,


    Kaffeepause.

    Wenn das Leben dir eine Zitrone gibt, frag nach Salz und Tequila!

  • Könntest du dein Problem bitte nochmal erklären ? Ich fürchte ich habe es nicht ganz verstanden, denn geladen und gespeichert wird ja alles richtig.


    PS: Du könntest in die Variable 'Spieler[playerid][level]' beim laden noch ein Wert übergeben.


    //edit Wo setzt du die Variable Spieler[playerid][eingeloggt] auf 1 ? (anscheind ja nicht beim laden)

    stock loadprofil (mit Level + eingeloggt)
    stock loadprofil(playerid)
    {
    new pname[MAX_PLAYERS],accFormat[128];
    GetPlayerName(playerid,pname,sizeof pname);
    format(accFormat,sizeof accFormat,"%s.kaffee",pname);
    SetPlayerSkin(playerid, dini_Int(accFormat,"skin"));
    GivePlayerMoney(playerid, dini_Int(accFormat,"money"));
    Spieler[playerid][exp] = dini_Int(accFormat,"exp");
    Spieler[playerid][age] = dini_Int(accFormat,"age");
    Spieler[playerid][sex] = dini_Int(accFormat,"sex");
    Spieler[playerid][fraktion] = dini_Int(accFormat,"fraktion");
    Spieler[playerid][rang] = dini_Int(accFormat,"rang");
    Spieler[playerid][alevel] = dini_Int(accFormat,"alevel");
    Spieler[playerid][lastx] = dini_Float(accFormat,"lastx");
    Spieler[playerid][lasty] = dini_Float(accFormat,"lasty");
    Spieler[playerid][lastz] = dini_Float(accFormat,"lastz");
    Spieler[playerid][level] = dini_Int(accFormat,"level");//hinzugefügt
    SetPlayerScore(playerid,Spieler[playerid][level] );//abgeändert
    Spieler[playerid][eingeloggt] = 1;//hinzugefügt
    return 1;
    }

    2 Mal editiert, zuletzt von Red_Romeo ()

  • Mach mal aus dem
    printf("loadprofil(exp: %d, level: %d)", dini_Int(accFormat,"exp"), dini_Int(accFormat,"level"));
    was Red_Romeo geschrieben hat...
    printf("loadprofil(exp: %d, level: %d)",Spieler[playerid][exp], Spieler[playerid][level]);


    Dass es in der Datei richtig ist, das wissen wir ja.. Das für uns relevante ist Spieler[playerid][exp].


    Und wo versuchst du es zu laden, bzw. anzuzeigen? Und wo werden die Exp hochgezählt.

  • Die Exp etc werden ja auch richtig hochgezählt. Zum test wird jede min 1 Exp hochgezählt, dass klappt auch!
    Auch beim aussloggen selbst werden die daten genau in die DINI übertragen.


    Nur sobald der Account wieder geladen wird ( relogin ) sind die EXP zwar da , aber das level wird nicht geladen.


    [13:37:48] [connection] 127.0.0.1:59333 requests connection cookie.
    [13:37:49] Incoming connection: 127.0.0.1:59333 id: 0
    [13:37:49] [join] Kaffeepause. has joined the server (0:127.0.0.1)
    [13:37:53] loadprofil(exp: 17, level: 0)

    Grüße,


    Kaffeepause.

    Wenn das Leben dir eine Zitrone gibt, frag nach Salz und Tequila!

  • Habe es vorhin schon oben editiert, versuch das mal, du vergasst dein Level zu laden.
    stock loadprofil(playerid)
    {
    new pname[MAX_PLAYERS],accFormat[128];
    GetPlayerName(playerid,pname,sizeof pname);
    format(accFormat,sizeof accFormat,"%s.kaffee",pname);
    SetPlayerSkin(playerid, dini_Int(accFormat,"skin"));
    GivePlayerMoney(playerid, dini_Int(accFormat,"money"));
    Spieler[playerid][exp] = dini_Int(accFormat,"exp");
    Spieler[playerid][age] = dini_Int(accFormat,"age");
    Spieler[playerid][sex] = dini_Int(accFormat,"sex");
    Spieler[playerid][fraktion] = dini_Int(accFormat,"fraktion");
    Spieler[playerid][rang] = dini_Int(accFormat,"rang");
    Spieler[playerid][alevel] = dini_Int(accFormat,"alevel");
    Spieler[playerid][lastx] = dini_Float(accFormat,"lastx");
    Spieler[playerid][lasty] = dini_Float(accFormat,"lasty");
    Spieler[playerid][lastz] = dini_Float(accFormat,"lastz");
    Spieler[playerid][level] = dini_Int(accFormat,"level");//hinzugefügt
    SetPlayerScore(playerid,Spieler[playerid][level] );//abgeändert
    Spieler[playerid][eingeloggt] = 1;//hinzugefügt
    return 1;
    }