Ist neue Zeit besser wie Alte

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
  • Hey ho


    ich hab mir ein system erstellt, wo in einer datei die rundenzeit eingetragen wird.


    dort steht z.b. drin.


    Zitat

    Name: Rocky Zeit: 0:43


    das ganze wird so ausgelesen und gespeichert.

    SpielerInfo[playerid][Score1] += 1;
    new zeitstring[64];
    SpielerInfo[playerid][rennen] = 3;
    GameTextForPlayer(playerid, "~r~Finish", 2000, 1);
    new rtime,minutes,sek;
    rtime = GetTickCount() - rzeit[playerid];
    minutes=rtime/60000;
    rtime-=(60000*minutes);
    sek=rtime/1000;//sekunden
    rtime-=(sek*1000);
    format(zeitstring,128,"Deine zeit: %02d:%02d",minutes,sek);
    GameTextForPlayer(playerid,zeitstring,3000, 1);
    new entry[256];
    new pName1[MAX_PLAYER_NAME];
    GetPlayerName(playerid,pName1,sizeof(pName1));
    format(entry, sizeof(entry), "Name: %s Zeit: %d:%d\n",pName1,minutes,sek);
    new File:hFile;
    hFile = fopen("Topscore.txt", io_append);
    fwrite(hFile, entry);
    fclose(hFile);
    SpawnPlayer(playerid);


    So meine frage ist nun, wie ich das machen kann, dass wenn ein user die zeit von 43 sek. überboten hat, diese dann in die datei eingetragen wird und der alte wert, Name: Rocky Zeit: 0:43, gelöscht wird und durch den neuen ersetzt wird.


    auslesen tu ich die datei so:

    new string[64];
    new read[128];
    new File:hFile = fopen("Topscore.txt", io_read);
    fread(hFile, string);
    while(fread(hFile,read))
    {
    format(string,sizeof (string), "%s\n%s",string,read);
    TextDrawSetString(Textdraw2, string);
    }
    fclose(hFile);

    ich hoffe ihr könnt mir anhand eines beispiels erklären wie das funktioniert. ich hänge da schon seit tagen dran. alles was ich gefunden habe hat mir bisher nicht geholfen. deswegen hoffe ich auf ein brauchbares beispiel von euch.
    wäre sehr dankbar für jede hilfe.


    mfg rocky

  • Achso, ne
    Musste erstmal die Datei lesen, danach kannste in dem string den du vom lesen bekommst nach "Name:" und "Zeit:" suchen und ausgehend davon den Bereich aus dem String ausschneiden und verwenden den du brauchst.


    Stichwort: fread,strfind,Strmid,strval
    Einfach mal in der Wiki schauen

  • oh man. das klingt so kompliziert alle. ich möchte doch nur eine bestenliste machen, und die anzeigen lassen. das kann doch nicht so umständlich sein. seit einer woche häng ich an dem mist und habe es nur hinbekommen die daten zu speichern, was ja auch nicht schwer ist. ;(

  • naja das mit dem ordnen denk ich leuchtet ihm nun nicht ein
    daher schau dir das mal an das sollte dir als codeschnipsel helfen


    http://forum.sa-mp.de/san-andr…Ctzliche-codeschnipsel-38


    Da ich vor kurzem eine Bestenliste erstellt habe jedoch für Punkte und nicht für Rudenzeiten ( nebensächlich), aufjedenfall könnte dir
    das weiter helfen denk ich zumindestens.


    //edit
    Stichwort : quicksort :D kannst ja mal danach googeln

  • Solche Listen oder sowas lässt sich meiner Meinung nach mit MySQL besser lösen, dabei kannste auch eine Liste erstellen und nicht nur einen Namen.
    Dabei musste nichtmal MySQL Installieren es gibt auch vom SAMP Standard eine SQLite Datenbank die in Scriptfiles liegt.
    Wenn man ohne grafische Oberfläche dort auskommt ist das garnicht mal so schlecht.


    Ansonsten, lass es halt erstmal sein, irgendwann überkommt es dich ja vllt :D

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen
  • ja an mysql hab ich auch schon gedacht. aber damit kenn ich mich überhaupt nicht aus, was aber nicht schlecht wäre es zu wissen. naja ich mach erstmal an den anderen funktionen weiter. danke euch trotzdem, dass ihr es versucht habt mir zu zeigen.

  • ja an mysql hab ich auch schon gedacht. aber damit kenn ich mich überhaupt nicht aus, was aber nicht schlecht wäre es zu wissen. naja ich mach erstmal an den anderen funktionen weiter. danke euch trotzdem, dass ihr es versucht habt mir zu zeigen.


    Diese einstellung find ich dazu leider unpassend wenn du willst kann ich dir das ganze mal erklären entweder auf dem Ts3 hier oder per pn
    oder ich könnte dazu ein Tutorial noch schreiben ^^.


    @ Benjamin ich frag mich gerade wie sowas möglich wäre außer das auslesen oder vergleichen der einträge ? und gegeben falls dann überschreiben

  • Hier, so sollte das funktionieren:


    SpielerInfo[playerid][Score1] += 1;
    new zeitstring[64];
    SpielerInfo[playerid][rennen] = 3;
    GameTextForPlayer(playerid, "~r~Finish", 2000, 1);
    new rtime,minutes,sek;
    rtime = GetTickCount() - rzeit[playerid];
    minutes=rtime/60000;
    rtime-=(60000*minutes);
    sek=rtime/1000;//sekunden
    rtime-=(sek*1000);
    format(zeitstring,128,"Deine zeit: %02d:%02d",minutes,sek);
    GameTextForPlayer(playerid,zeitstring,3000, 1);


    new string[64];
    new read[128];
    new File:hFile = fopen("Topscore.txt", io_read);
    fread(hFile, string);
    while(fread(hFile,read))
    {
    format(string,sizeof (string), "%s%s",string,read);//Auslesen der alten Bestzeit, es sollte nur eine Zeile in der Datei stehen.
    }
    fclose(hFile);


    TextDrawSetString(Textdraw2, string);


    new time1, time2, CharIndex, tmpString[64];
    while(string[CharIndex] != ':'){CharIndex++;}
    CharIndex++;//Überspringen des ersten ':'
    while(string[CharIndex] != ':'){CharIndex++;}
    CharIndex += 2;//Überspringen des zweiten ':' und des Leerzeichens
    while(string[CharIndex] != ':'){format(tmpString, sizeof(tmpString), "%s%c", tmpString, string[CharIndex]);CharIndex++;}//Parsen der Minuten
    time1 = strval(tmpString);//Speichern der Minuten
    CharIndex++;
    while(string[CharIndex] >= '0' && string[CharIndex] <= '9'){format(tmpString, sizeof(tmpString), "%s%c", tmpString, string[CharIndex]);CharIndex++;}//Parsen der Sekunden
    time2 = strval(tmpString);//Speichern der Sekunden


    if(time1 < minutes || (time1 == minutes && time2 < sek))// Neue Bestzeit
    {
    new entry[256];
    new pName1[MAX_PLAYER_NAME];
    GetPlayerName(playerid,pName1,sizeof(pName1));
    format(entry, sizeof(entry), "Name: %s Zeit: %d:%d\n",pName1,minutes,sek);
    new File:hFile;
    hFile = fopen("Topscore.txt", io_write);
    fwrite(hFile, entry);
    fclose(hFile);
    }
    SpawnPlayer(playerid);


    Arbet von ca. zwei Minuten, hoffe du kannst damit etwas anfangen.


    BlackLegend


    (e): Code überarbeitet

    3 Mal editiert, zuletzt von BlackLegend ()