Spielervariable(enum) will sich nicht speichern

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
  • Guten Morgen,


    ich habe ein Problem.
    Und zwar steht dies in mein OnPlayerDeath:



    public OnPlayerDeath(playerid, killerid, reason)
    {
    dutyvar[playerid] = 0;
    SpielerInfo[playerid][Tode] += 1;
    SpielerInfo[killerid][Morde] += 1;
    SpielerInfo[playerid][Friedhof] = 1;
    SpielerInfo[playerid][Friedhofzeit] = 2;
    Speichern(playerid);
    Speichern(killerid);
    return 1;
    }
    doch die variable will sich nicht umstellen.
    Es geht um Friedhof und Friedhofzeit.


    was kann die ursache sein?


    mfg
    //edit: ich meinte, sie speichert sich nicht.

    526C4Hj.png Mit freundlichen Grüßen,
    Noneatme

  • Mehr Informationen dazu würden uns sicherlich helfen ^^.

  • Okay, mein Speichersystem:


    stock LoadAccount:



    SpielerInfo[playerid][Friedhof]=dini_Int(Spielerdatei,"Friedhof");
    SpielerInfo[playerid][Friedhofzeit]=dini_Int(Spielerdatei,"Friedhofzeit");


    stock Speichern:



    dini_IntSet(Spielerdatei,"Friedhof",SpielerInfo[playerid][Friedhof]);
    dini_IntSet(Spielerdatei,"Friedhofzeit",SpielerInfo[playerid][Friedhofzeit]);


    jetzt gesamt:



    stock SpielerSpeichern(playerid)
    {
    new Spielerdatei[64];
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,sizeof(name));
    format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
    dini_IntSet(Spielerdatei,"Level",GetPlayerScore(playerid));
    dini_IntSet(Spielerdatei,"Geld",GetPlayerMoney(playerid));
    dini_IntSet(Spielerdatei,"Adminlevel",SpielerInfo[playerid][Adminlevel]);
    dini_IntSet(Spielerdatei,"Fraktion",SpielerInfo[playerid][Fraktion]);
    dini_IntSet(Spielerdatei,"Spawnpunkt",SpielerInfo[playerid][Spawnpunkt]);
    dini_IntSet(Spielerdatei,"Bank",SpielerInfo[playerid][Bank]);
    dini_IntSet(Spielerdatei,"Skin",SpielerInfo[playerid][Skin]);
    dini_IntSet(Spielerdatei,"Rank",SpielerInfo[playerid][Rank]);
    dini_IntSet(Spielerdatei,"Knast",SpielerInfo[playerid][Knast]);
    dini_IntSet(Spielerdatei,"Knastzeit",SpielerInfo[playerid][Knastzeit]);
    dini_IntSet(Spielerdatei,"Kaution",SpielerInfo[playerid][Kaution]);
    dini_IntSet(Spielerdatei,"Knastbesuche",SpielerInfo[playerid][Knastbesuche]);
    dini_IntSet(Spielerdatei,"Zeitzumpayday",SpielerInfo[playerid][Zeitzumpayday]);
    dini_IntSet(Spielerdatei,"Tode",SpielerInfo[playerid][Tode]);
    dini_IntSet(Spielerdatei,"Morde",SpielerInfo[playerid][Morde]);
    dini_IntSet(Spielerdatei,"OSkin",SpielerInfo[playerid][OSkin]);
    dini_IntSet(Spielerdatei,"Handy",SpielerInfo[playerid][Handy]);
    dini_IntSet(Spielerdatei,"Handynummer",SpielerInfo[playerid][Handynummer]);
    dini_IntSet(Spielerdatei,"Wasser",SpielerInfo[playerid][Wasser]);
    dini_IntSet(Spielerdatei,"Burger",SpielerInfo[playerid][Burger]);
    dini_IntSet(Spielerdatei,"Spielzeit",SpielerInfo[playerid][Spielzeit]);
    dini_IntSet(Spielerdatei,"Wanteds",SpielerInfo[playerid][Wanteds]);
    dini_IntSet(Spielerdatei,"Waffe1",SpielerInfo[playerid][Waffe1]);
    dini_IntSet(Spielerdatei,"Waffe2",SpielerInfo[playerid][Waffe2]);
    dini_IntSet(Spielerdatei,"Waffe3",SpielerInfo[playerid][Waffe3]);
    dini_IntSet(Spielerdatei,"Muni1",SpielerInfo[playerid][Muni1]);
    dini_IntSet(Spielerdatei,"Muni2",SpielerInfo[playerid][Muni2]);
    dini_IntSet(Spielerdatei,"Muni3",SpielerInfo[playerid][Muni3]);
    dini_IntSet(Spielerdatei,"Ar1",SpielerInfo[playerid][Ar1]);
    dini_IntSet(Spielerdatei,"Ar2",SpielerInfo[playerid][Ar2]);
    dini_IntSet(Spielerdatei,"Ar3",SpielerInfo[playerid][Ar3]);
    dini_IntSet(Spielerdatei,"Ar4",SpielerInfo[playerid][Ar4]);
    dini_IntSet(Spielerdatei,"Ar5",SpielerInfo[playerid][Ar5]);
    dini_IntSet(Spielerdatei,"Ar6",SpielerInfo[playerid][Ar6]);
    dini_IntSet(Spielerdatei,"Ar7",SpielerInfo[playerid][Ar7]);
    dini_IntSet(Spielerdatei,"Ar8",SpielerInfo[playerid][Ar8]);
    dini_IntSet(Spielerdatei,"Ar9",SpielerInfo[playerid][Ar9]);
    dini_IntSet(Spielerdatei,"Ar10",SpielerInfo[playerid][Ar10]);
    dini_IntSet(Spielerdatei,"Ar11",SpielerInfo[playerid][Ar11]);
    dini_IntSet(Spielerdatei,"Neu",SpielerInfo[playerid][Neu]);
    dini_IntSet(Spielerdatei,"Friedhof",SpielerInfo[playerid][Friedhof]);
    dini_IntSet(Spielerdatei,"Friedhofzeit",SpielerInfo[playerid][Friedhofzeit]);

    return 1;
    }
    public OnPlayerSpawn(playerid)
    {
    if(SpielerInfo[playerid][Friedhof] == 1){
    SetToFriedhof(playerid);
    MSG(playerid,COLOR_RED,"Du bist noch im tiefem Schlaf. Benutze /totzeit um zu sehen, wie Tot du bist.");
    }
    return 1;
    }



    public ResetFriedhof(playerid)
    {
    SpawnPlayer(playerid);
    SetPlayerInterior(playerid,0);
    SetPlayerVirtualWorld(playerid,0);
    Updatewelt();
    }


    public SetToFriedhof(playerid)
    {
    SetPlayerPos(playerid,817.7482,-1103.7313,25.7927);
    SetPlayerTime(playerid,5,0);
    SetPlayerInterior(playerid,0);
    SetPlayerVirtualWorld(playerid,1);
    SetPlayerWeather(playerid,8);
    TextDrawSetString(tot,"Auf dem Friedhof fuer 2 Minuten");
    TextDrawShowForPlayer(playerid,tot);
    }



    public Updateknast(playerid)
    {
    if(SpielerInfo[playerid][Friedhof] == 1)
    {
    if(SpielerInfo[playerid][Friedhofzeit] == 0)
    {
    SpielerInfo[playerid][Friedhof] = 0;
    SpawnPlayer(playerid);
    ResetFriedhof(playerid);
    MSG(playerid,COLOR_LIGHTGREEN,"Du bist wieder aufgewacht.");
    GameTextForPlayer(playerid,"~g~Aufgewacht!",3,5000);
    Speichern(playerid);
    TextDrawHideForPlayer(playerid,tot);
    }
    }
    if(SpielerInfo[playerid][Friedhof] == 1){
    SpielerInfo[playerid][Friedhofzeit] -= 1;
    new string[64];
    format(string,sizeof(string),"Auf dem Friedhof fuer %d Minuten",SpielerInfo[playerid][Friedhofzeit]);
    TextDrawSetString(tot,string);
    TextDrawShowForPlayer(playerid,tot);
    Speichern(playerid);}
    return 1;
    }


    SetTimer("Updateknast",60000,1);

    526C4Hj.png Mit freundlichen Grüßen,
    Noneatme

  • Und dein Problem ist das wenn du Disconnectest das die Datei nicht gespeichert wird oder nur das mit dem Friedhof nicht ?

  • Dann mach das beim Sterben nicht über das enum sondern direkt über dini, vllt. klappt es dann.

  • hab mir das nicht angeschaut, aber ich weiß dass OnPlayerDeath irg wie verbuggt ist, hatte auch viele Probs damit. stell vertausch mal die Friedhof und die Friedhofzeit Variablen und sag ob das dann gespeichert wird oder vertausch die Varibale von der du weißt, dass sie umgestellt wird

  • geht uahc nicht :(


    ich werd mal Trick 17 anwenden, und tu das unter OnPlayerSpawn


    if(gekillt[playerid] == 1){ SpielerInfo[playerid][Friedhof] = 1; SpielerInfo[playerid][Friedhofzeit] = 2; gekillt[playerid] = 0;}


    mit der Var unter OnPlayerDeath.


    //edit: failure nummer 4


    //edit HustleR


    es wird keine Variable von Friedhof und Friedhofzeit je umgestellt, weder gespeichert. Glaub ich, ich kann ja mal testen


    //edit:


    ycmd("/friedhof")
    {
    if(SpielerInfo[playerid][Friedhof] == 1){ MSG(playerid,COLOR_RED,"Friedhof ist 1");}
    if(SpielerInfo[playerid][Friedhofzeit] == 2){ MSG(playerid,COLOR_RED,"Friedhofzeit ist 2");}
    new string[256];
    format(string,sizeof(string),"Friedhof: %d, Friedhofzeit: %d",SpielerInfo[playerid][Friedhof],SpielerInfo[playerid][Friedhofzeit]);
    MSG(playerid,COLOR_LIGHTBLUE,string);

    return 1;
    }
    mal als test:


    vorm Sterben: friedhof 0 zeit auch 0
    beim sterben: 0 0
    nachm sterben: 0 0


    also stellt sich garnix um.


    ....


    //edit: Mein problem ist ja nur, die Variable.
    ich meine ich kann auch ganz auf die Spielervarialbe beim tot verzichten, erstell ich eine für MAX_PLAYERS, aber wenn ich meine Datei verändere, dann funktioniert alles.


    //edit nochmal:
    hab das mal test gemacht!:


    Inenforcer[playerid] = 0;
    Watching[playerid] = 0;
    Goto[playerid] = 0;
    dutyvar[playerid] = 0;
    SpielerInfo[playerid][Tode] += 1;
    print("morde");
    SpielerInfo[killerid][Morde] += 1;
    print("tode");
    gekillt[playerid] = 1;
    print("gekillt");
    SpielerInfo[playerid][Friedhof] += 1;
    SpielerInfo[playerid][Friedhofzeit] += 2;
    print("2 abfragen");
    Speichern(playerid);
    Speichern(killerid);
    print("gespeichernt");


    der Printet nur bis "morde" !
    HustleR
    bei OnPlayerDeath



    //edit: ja ist der fehler. Der Returnt einfach. Keine ahnung wieso

    526C4Hj.png Mit freundlichen Grüßen,
    Noneatme

    Einmal editiert, zuletzt von Noneatme ()

  • habs hinbekommen, mit tausend stocks ;o



    stock SpeicherTot(playerid,killerid)
    {
    SpeicherFriedhof(playerid);
    SpielerInfo[playerid][Tode] += 1;
    SpielerInfo[killerid][Morde] += 1;
    }
    stock SpeicherFriedhof(playerid)
    {
    SpielerInfo[playerid][Friedhof] = 1;
    SpielerInfo[playerid][Friedhofzeit] = 2;
    }

    526C4Hj.png Mit freundlichen Grüßen,
    Noneatme

  • Hmm ich hätt vll ne Erklärung warum er das nicht gespeichtert bzw geprintet hat


    es könnte an der PAWN Funktion goto liegen die du verwendest.
    Da ja Goto über setzt Gehe Zu heißt könnte das heißen er springt zu einem bestimmten Punkt


    Ich versuch das ma zu erklären


    Inenforcer[playerid] = 0;
    Watching[playerid] = 0;
    Goto[playerid] = 0; // hier gibst du an das er nach [playerid] = 0 springen soll
    dutyvar[playerid] = 0; // das taucht einmal hier auf
    SpielerInfo[playerid][Tode] += 1; // hier [Tode] könte als 0 gewertet werden
    print("morde"); // läuft hier weiter
    SpielerInfo[killerid][Morde] += 1; // findet nix mehr und springt raus
    print("tode");
    gekillt[playerid] = 1;
    print("gekillt");
    SpielerInfo[playerid][Friedhof] += 1;
    SpielerInfo[playerid][Friedhofzeit] += 2;
    print("2 abfragen");
    Speichern(playerid);
    Speichern(killerid);
    print("gespeichernt");


    Das wäre so eine Erklärung wenn jemand eine bessere hat soll er sie posten.

    "Bevor ich mir Informationen aus der "Bild" hole,
    werde ich anfangen, Wahlergebnisse danach vorauszusagen,
    neben welchen Busch unsere Katze gepinkelt hat."

    Margarete Stokowski