fwrite Problem [GELÖST] - DIALOG_STYLE_LIST Problem

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,


    ich habe das Problem, dass wenn ich die Datei neu öffne und fwrite benutze, dass die alten Informationen gelöscht werden. Eine Idee was zu tun ist, dass einfach eine neue Zeile erstellt wird und wieder hinzugefügt?

    Einmal editiert, zuletzt von GiS ()

  • Falscher Write-Modus.
    http://wiki.sa-mp.com/wiki/Fopen



    Ich gehe davon aus,du kannst Englisch.Wenn nicht,Google Translator kriegt das auch hin.


    Danke, hatte io_write statt append. :whistling:


    EDIT: Zu einem anderen Problem. Ich habe nun in einer .ini Datei alle Spieler untereinander geordnet. Wie kann ich die nun in ShowPlayerDialog so ausgeben, dass jede Zeile in der .ini Datei eine Listenzelle bekommt?

    Einmal editiert, zuletzt von GiS ()

  • new
    File:fFile,
    sOutput[512],
    sBuffer[128];
    fFile = fopen("deinedatei.txt",io_read);
    if(fFile) {
    sOutput[0] = '\0';
    while(fread(fFile,sBuffer,sizeof(sBuffer))) {
    //StripNewLine(sBuffer); falls du die funktion hast
    if(!sBuffer[0]) {
    continue;
    }
    format(sOutput,sizeof(sOutput),"%s%s\n",sOutput,sBuffer);
    }
    fclose(fFile);
    }
    Ich mache es immer in etwa so.
    Der String mit allen Namen ist sOutput.

  • Danke, habe es nun eingetragen aber kann es wegen einem Error noch nicht testen,


    Die Zeile:


    if(PlayerInfo[playerid][pFaction] == "Government" && PlayerInfo[playerid][pFactionrank] == President)


    Der Error:


    C:\Dokumente und Einstellungen\GiS\Eigene Dateien\Server\gamemodes\midwestglory.pwn(637) : error 001: expected token: "-string end-", but found "-identifier-"
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.


    Und was bezweckt die while-Schleife?

  • if(PlayerInfo[playerid][pFaction] == "Government" && PlayerInfo[playerid][pFactionrank] == President)
    Was willst n damit bezwecken?
    Strings vergleicht man mit strcmp().Sie sind gleich,wenn die Funktion 0 zurück gibt.


    Die ist dafür da,damit die Datei solange gelesen wird,wie es noch Einträge / Zeilen gibt.
    Von einer for() Schleife hättest ja nicht viel,wenn du nicht weisst,wieviele Einträge es gibt.

  • if(PlayerInfo[playerid][pFaction] == "Government" && PlayerInfo[playerid][pFactionrank] == President)
    Was willst n damit bezwecken?
    Strings vergleicht man mit strcmp().Sie sind gleich,wenn die Funktion 0 zurück gibt.


    Die ist dafür da,damit die Datei solange gelesen wird,wie es noch Einträge / Zeilen gibt.
    Von einer for() Schleife hättest ja nicht viel,wenn du nicht weisst,wieviele Einträge es gibt.


    Sorry, hätte ich auch selber drauf kommen können ^^


    Bin nun am testen :)

    EDIT:
    Funktioniert, wäre darauf nie nach einer Woche scripten gekommen ^^
    EDIT #2: Nun möchteich wissen welches Listitem er angeklickt hat.


    Kann man das folgendermaßen machen?


    format(file, sizeof(file), "%s", listitem);


    EDIT #3: Ich habe nähmlich irgendwo einen Bug und ich denke es liegt daran.

    Einmal editiert, zuletzt von GiS ()

  • listitem ist eine Zahl.
    Damit erhälst du den Index des gewählten Items.Achtung, es fängt bei 0 an.Nicht 1.
    Wenn ich mich richtig erinnere,kann man auch aber inputtext den Text bekommen,des angeklickten Items.
    Ansonsten schau dir das Callback im SA:MP Wiki an.
    http://wiki.sa-mp.com/wiki/OnDialogResponse


    Hmm, in dem Fall benötige ich aber nicht den Index sondern den Name. Im Callback auf wiki habe ich nichts passendes gefunden.

  • Hmm, in dem Fall benötige ich aber nicht den Index sondern den Name. Im Callback auf wiki habe ich nichts passendes gefunden.


    Mal ausprobiert,was sich hinter inputtext versteckt via Debug-Infos?
    //Edit: Habe mich doch nicht geirrt.Mit inputtext bekommst auch den Text des gewählten Items.

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen

  • Mal ausprobiert,was sich hinter inputtext versteckt via Debug-Infos?


    Also mit printf richtig?


    Ich machs mal kurz...


    EDIT: Ahm verstehe ich dich gerade falsch oder hast du vllt. was verwechselt? Ich muss das listitem rausbekommen, da du immer inputtext schreibst..
    EDIT #2: Also, es gibt ganz normal die Index aus (In dem Fall 0 beim ersten listitem und 1 beim 2.).

    Einmal editiert, zuletzt von GiS ()

  • Ich verwechsel nichts.
    Mit listitem bekommst du den Index des gewählten Items in der Liste.( 0 - IRGENDWAS ).
    inputtext ist eigentlich für den speziellen fall das man ein DIALOG_MENU mit einer input-Box haben will. inputtext funktioniert aber auch bei DIALOG_MENU's mit Listen und gibt dir den Text,der in diesem gewähltem Eintrag steht.



    public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
    {
    if(dialogid == DEIN_DIALOG) { // Dein DIALOG mit den Usernamen,muss Liste sein
    printf("listindex %d mit Text %s",listitem,inputtext);
    }
    return 1;
    }
    Der inputtext ist dann dein gewählten Username ( In diesem speziellen Beispiel ).

  • Ah, das habe ich so noch nie gehört, dann ist es natürlich klar. Danke für die gute Erläuterung.


    EDIT: Neues Problem...sorry


    Also ich habe nun die Datei, wo alle Spieler untereinander aufgelistet werden. Ebenfalls habe ich nun alle in einer Dialoglist geordnet. Nun möchte ich aber, dass wenn ich den 2ten Knopf bei dem Dialog drücke, dass dieser Name aus der Datei gelöscht wird. Ist dies möglich? Ich habe keinen passenden type für fopen gefunden.


    EDIT: Hat niemand eine Idee? Ich bin schon mehrere Stunden davor :P

    2 Mal editiert, zuletzt von GiS ()

  • Das löschen aus einer Datei ist nicht ganz so leicht wie daraus lesen oder hinnein zu schreiben.
    Leider find Ich dazu auch keine passende Funktion, obwohl ich mir eigentlich sicher bin es gab mal "fremoveline".

    • 2 Datein Öffnen
    • Aus Datei 1 alles auslesen und in Datei 2 schreiben bis aus "gesuchte Zeile"
    • Datei 1 Schließen + Löschen
    • Datei 2 Schließen
    • Datei 2 in Datei 1 umbennen ( Diesmal alles aus Datei 2 in Datei 1 schreiben )


    Vielleicht hat ja jemand diese Funktion noch :/.