Save Timer Bringt mein Server zum Crashen aber warum?

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 ich bins wider euer Lästiger alberto ^^. Also habe ein frage und zwar habe hier timer der Tankstellen und Materialen speichern soll. Aber wnen ich die klammer weg nemme auf server mache dann crasht der server wider.


    Hier:


    SetTimer("Save", 600000, true); // Saved Tankstellen und Produkte


    public Save()
    {
    SaveTankstellen();
    SaveProducts();
    }


    public SaveTankstellen()
    {
    for(new i = 0; i < MAX_TANKEN; i++)
    {
    new string[64];
    new buffer[32];
    format(string, sizeof(string), "/tanken/%d.tankstelle", i);
    if(!fexist(string)) continue;
    format(buffer, sizeof(buffer), "%d", TankStellen[i][liter]);
    new File:tfile = fopen(string, io_write);
    fwrite(tfile, buffer);
    fclose(tfile);
    }
    return 1;
    }


    public SaveProducts()
    {
    new string[64];
    new buffer[32];
    {
    format(string, sizeof(string), "/produkt/wang.product");
    format(buffer, sizeof(buffer), "%d", Produkte[proWANG]);
    new File:cFile = fopen(string, io_write);
    fwrite(cFile, buffer);
    fclose(cFile);
    }
    {
    format(string, sizeof(string), "/produkt/otto.product");
    format(buffer, sizeof(buffer), "%d", Produkte[proOTTO]);
    new File:cFile = fopen(string, io_write);
    fwrite(cFile, buffer);
    fclose(cFile);
    }
    {
    format(string, sizeof(string), "/produkt/boot.product");
    format(buffer, sizeof(buffer), "%d", Produkte[proBOOT]);
    new File:cFile = fopen(string, io_write);
    fwrite(cFile, buffer);
    fclose(cFile);
    }
    {
    format(string, sizeof(string), "/produkt/heli.product");
    format(buffer, sizeof(buffer), "%d", Produkte[proHELI]);
    new File:cFile = fopen(string, io_write);
    fwrite(cFile, buffer);
    fclose(cFile);
    }
    {
    format(string, sizeof(string), "/produkt/moped.product");
    format(buffer, sizeof(buffer), "%d", Produkte[proMOPED]);
    new File:cFile = fopen(string, io_write);
    fwrite(cFile, buffer);
    fclose(cFile);
    }
    {
    format(string, sizeof(string), "/produkt/grotti.product");
    format(buffer, sizeof(buffer), "%d", Produkte[proGROTTI]);
    new File:cFile = fopen(string, io_write);
    fwrite(cFile, buffer);
    fclose(cFile);
    }
    {
    format(string, sizeof(string), "/produkt/shody.product");
    format(buffer, sizeof(buffer), "%d", Produkte[proShody]);
    new File:cFile = fopen(string, io_write);
    fwrite(cFile, buffer);
    fclose(cFile);
    }
    return 1;
    }


    public LoadProducts()
    {
    new string[64];
    new buffer[32];
    format(string, sizeof(string), "/produkt/wang.product");
    if(fexist(string))
    {
    new File:cFile = fopen(string, io_read);
    fread(cFile, buffer, sizeof(buffer), false);
    Produkte[proWANG] = strval(buffer);
    fclose(cFile);
    }
    format(string, sizeof(string), "/produkt/otto.product");
    if(fexist(string))
    {
    new File:cFile = fopen(string, io_read);
    fread(cFile, buffer, sizeof(buffer), false);
    Produkte[proOTTO] = strval(buffer);
    fclose(cFile);
    }
    format(string, sizeof(string), "/produkt/heli.product");
    if(fexist(string))
    {
    new File:cFile = fopen(string, io_read);
    fread(cFile, buffer, sizeof(buffer), false);
    Produkte[proHELI] = strval(buffer);
    fclose(cFile);
    }
    format(string, sizeof(string), "/produkt/boot.product");
    if(fexist(string))
    {
    new File:cFile = fopen(string, io_read);
    fread(cFile, buffer, sizeof(buffer), false);
    Produkte[proBOOT] = strval(buffer);
    fclose(cFile);
    }
    format(string, sizeof(string), "/produkt/moped.product");
    if(fexist(string))
    {
    new File:cFile = fopen(string, io_read);
    fread(cFile, buffer, sizeof(buffer), false);
    Produkte[proMOPED] = strval(buffer);
    fclose(cFile);
    }
    format(string, sizeof(string), "/produkt/grotti.product");
    if(fexist(string))
    {
    new File:cFile = fopen(string, io_read);
    fread(cFile, buffer, sizeof(buffer), false);
    Produkte[proGROTTI] = strval(buffer);
    fclose(cFile);
    }
    format(string, sizeof(string), "/produkt/shody.product");
    if(fexist(string))
    {
    new File:cFile = fopen(string, io_read);
    fread(cFile, buffer, sizeof(buffer), false);
    Produkte[proShody] = strval(buffer);
    fclose(cFile);
    }
    return 1;
    }


    public LoadTankstellen()
    {
    for(new i = 0; i < MAX_TANKEN; i++)
    {
    new string[64];
    new buffer[32];
    format(string, sizeof(string), "/tanken/%d.tankstelle", i);
    if(!fexist(string)) continue;
    new File:tfile = fopen(string, io_read);
    fread(tfile, buffer, sizeof(buffer), false);
    TankStellen[i][liter] = strval(buffer);
    //strmid(TankStellen[i][liter] , buffer , 0 , strlen( buffer ) , sizeof( i ) );
    fclose(tfile);
    }
    return 1;
    }


    Warum Crasht dann der server?


    Danke für eure hilfe :rolleyes:

  • In mom ist das so in gm:



    Bei den timer sind // vor also //SetTimer("Save", 600000, true); // Saved Tankstellen und Produkte


    Damit es nicht crasht

  • Mach dir mal einen Command zum Speichern der Mats und einen zum Speichern der Tankstellen! Und gib sie ihm spiel ein, dann musst du schauen bei welchem Command der Server crasht und dann kannst du so weiterschauen und weißt dass der Fehler zum Beispiel in einer public Funktion ist. Wenn der Server nicht crasht, dann schreib wieder bzw. wenn er crasht schreib bei welchem Command!


    Ah jetzt habe ich entdeckt was da faul ist, was sollen denn die { und } da mitten in der Funktion:
    public SaveProducts()
    {
    new string[64];
    new buffer[32];
    {
    format(string, sizeof(string), "/produkt/wang.product");
    format(buffer, sizeof(buffer), "%d", Produkte[proWANG]);
    new File:cFile = fopen(string, io_write);
    fwrite(cFile, buffer);
    fclose(cFile);
    }
    {
    format(string, sizeof(string), "/produkt/otto.product");
    format(buffer, sizeof(buffer), "%d", Produkte[proOTTO]);
    new File:cFile = fopen(string, io_write);
    fwrite(cFile, buffer);
    fclose(cFile);
    }
    {
    format(string, sizeof(string), "/produkt/boot.product");
    format(buffer, sizeof(buffer), "%d", Produkte[proBOOT]);
    new File:cFile = fopen(string, io_write);
    fwrite(cFile, buffer);
    fclose(cFile);
    }
    {
    format(string, sizeof(string), "/produkt/heli.product");
    format(buffer, sizeof(buffer), "%d", Produkte[proHELI]);
    new File:cFile = fopen(string, io_write);
    fwrite(cFile, buffer);
    fclose(cFile);
    }
    {
    format(string, sizeof(string), "/produkt/moped.product");
    format(buffer, sizeof(buffer), "%d", Produkte[proMOPED]);
    new File:cFile = fopen(string, io_write);
    fwrite(cFile, buffer);
    fclose(cFile);
    }
    {
    format(string, sizeof(string), "/produkt/grotti.product");
    format(buffer, sizeof(buffer), "%d", Produkte[proGROTTI]);
    new File:cFile = fopen(string, io_write);
    fwrite(cFile, buffer);
    fclose(cFile);
    }
    {
    format(string, sizeof(string), "/produkt/shody.product");
    format(buffer, sizeof(buffer), "%d", Produkte[proShody]);
    new File:cFile = fopen(string, io_write);
    fwrite(cFile, buffer);
    fclose(cFile);
    }
    return 1;
    }



    MfG Manuel1948

  • @ Anubis: Also Leerzeichen bringen sicherlich keinen Server zum Crashen, geschweige denn das es egal ist ob da jetzt nach nem Beistrich, der Argumente trennt, ein Leerzeichen ist. Und [pwn] gehört auch net dazu, bitte immer nochmal den geschribenen Thread überprüfen.


    Ein Beistrich ist ein Komma!

  • Also ich habe am eigenen Leib erfahren das ein leerzeichen innerhalb eines Strings "nach dem Komma" Server zum crashen bringen ;)



    Ich schreibe es ja hier nicht aus Spass und langeweile :thumbup:

    Einmal editiert, zuletzt von Anubis ()

  • Das kann nicht sein, daas wird wohl Zufall sein, wahrscheinlich hast du damals mehr geändert und dann gings plötzlich wieder. Und ein Leerzeichen in einem String kann gar nichts zum Crashen bringen, weil es ja in einer Zeichenkette keinen Fehler auslösen kan "Le erzeic hen" zum Beispiel, aber es kann sein das der String zu lange war und sich deswegen dein Server aufgehangen hat und grade durch die Leerzeichen, wurd wieder eine richtige Kürze erreicht. Aber ich weiß ja nett was in deinen Augen ein String ist. Aber nach Definition her ist ein String, wie gesagt eine Zeichenkette.
    SendClientMessage(playerid,rot,"Hallo Spieler!");
    In dem Fall wäre "Hallo Spieler" der String


    nur so am Rande erwähnt....


    aber Alberto, was machen eigentlich die Klammer ( { und } ) in deiner SaveMats Funktion? Seit wann macht man einfach solche Klamern rein, das könnte das problem sein lösch die mal.

  • Erzähl mir doch nicht was sein kann und was nicht, warum ziehst du dich eigentlich daran hoch ? Ich habe es so erlebt und darum gebe ich ihm den Tip - wenns bei ihm hilft ist gut und wenn nicht dann eben nicht.Von mir aus kann es auch zufall gewesen sein aber der Punkt ist, es war so. Hier gehts doch nicht darum wer mehr weiß als der andere. :thumbdown:

  • ...gehts darum wer mehr weiß, es ollen ja die anderen auch was lernen. Und von einem der mehr weiß kann man mehr lernen, ich will mich nicht streiten oder so ich sags dir nur wie es ist. Ich meine stell dir das mal vor ohne Leerzeichen, wenn man nach keinem Komma ein Lerzeichen macht würde das ganze Script total unübersichtlich und zusammengequetscht ausschauen und dann werden die Programmierer, die diese Sprache entwerfen es nicht so machen dass der Server crasht wenn man ein Leerzeichen oder zwei Leerzeichen nach einem Komma macht. Ich will dir doch auch nur lernen, das es einfach nicht möglich ist, damit du es auch weißt und Fehler anders zu lösen versuchst. Weil wenn du weißt der Lösungsweg ist sowieso ins Schwarze führend, dann sucht man woanders und findet es schneller bzw. eher. Wie gesagt es wird einfach ein langer String oder sonst was gewesen sein...

  • Ich will mich auch nicht streiten, passt schon.


    Ich hatte vorher auch noch nie erlebt das ein leerzeichen einen Servercrash verursacht aber es ist nunmal passiert und aus dem Grund habe ich es bei ihm in Betracht gezogen.Habe ja nicht gesagt das es die 100%tige Lösung ist sondern das er es mal "versuchen" soll. Kann gut sein das mein problem so ausgelöst wurde wie du es sagst und mein Lösungsansatz bei ihm total daneben ist aber ich habe eben nur aus erfahrung gesprochen und nicht aus der programmiertechnischen logik.

  • jetzt aber zurück zum eigentlichen Thema. Alberto das ist dien Thread also schreib uns was du probiert hast, was funktioniert bzw. wie es denn jetzt ausschaut, du bist zwar im Thread unterwegs aber meldest dich komischerweise nicht!

  • Also ich fidne es echt unverschämt einen Beitrag zu eröffnen und dann nicht mehr zurückzuschreiben, falls das Problem nicht mehr besteht oder es dadurch gelöst wurde. Das ist einfach nur unhöflich!!