Zahlauswahl (Keine Doppelvergebung)

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


    ich habe ein eigenes Versicherungs- + Nummernschildsystem gescriptet, doch leider hab ich nur noch ein Problem, was mich daran hindert komplett fertig zu sein.


    Ein Spieler wird gefragt, welche Zahl er aufs Nummernschild haben möchte. Bei Eingabe seiner Wunschzahl wird die Datei "Kennzeichen.cfg" geöffnet. In der Datei befindet sich kein Eintrag, daher wird dann abgefragt, ob die Wunschzahl in der Datei steht. Wenn die Wunschzahl in der Datei steht, wird dem Spieler gesagt, dass diese Zahl schon vergeben ist. Wenn nicht, wird seine Wunschzahl in der Datei (mithilfe von io_append) zusätzlich eingetragen. Das wars auch schon.


    Mein Problem liegt darin, dass ich nicht weiß, wie ich diese Zahl reinschreiben muss, sodass ich dann diese aus der Datei ablesen kann, um zu prüfen ob sie vergeben ist.


    Wäre echt klasse, wenn sich jemand, der sich damit auskennt, mir helfen könnte. Ich saß da jetzt ein paar Tage und Nächte drann, hab mir echt Mühe gegeben und dann ist es schon blöd und ärgerlich, wenn es wegen sowas nicht weitergeht. :thumbdown:


    Danke schon mal im Vorraus :)


    Mfg Alex

  • Natürlich wissen hier Leute wie das funktioniert.
    Im Prinzip funktioniert es folgendermaßen. ( Ganz wichtig, die Variable WUNSCHZAHL ( Integer ) repräsentiert die Variable in der du die Zahlen für das Nummernschild speicherst die der Spieler angegeben hat als Wunschziffern. )
    new
    tmp[64],
    bool:bInUse = false,
    File:fFile;
    fFile = fopen("kennzeichen.cfg",io_read);
    if(fFile) { // Datei erfolgreich geöffnet
    while(fread(fFile,tmp,sizeof(tmp))) { // Solange wir aus der Datei lesen
    StripNewLine(tmp); // Ist mehr oder weniger ein fix,kann ich nur empfehlen
    if(!tmp[0]) { // Falls es eine leere Zeile ist
    continue;
    }
    if(WUNSCHZAHL == strval(tmp) ) { // Überprüfen ob WUNSCHZAHL der Zahl die ausgelesen wurde entspricht
    bInUse = true;
    break;
    }
    }
    fclose(fFile);
    }
    if(bInUse) {
    // Falls Zahl bereits vorhanden, was machen?
    }
    else {
    fFile = fopen("kennzeichen.cfg",io_append); // Datei öffnen und zum schreiben vorbereit mit io_append
    format(tmp,sizeof(tmp),"%d\r\n",WUNSCHZAHL); // String formatieren
    fwrite(fFile,tmp); // in Datei schreiben
    fclose(fFile); // Datei schließen
    }

    Man könnte sich nach dem Prinzip auch eine Funktion basteln, wäre vllt für dich praktischer.

  • Vielen Dank Goldkiller,


    ich werds testen, sobald ich Zeit habe :)


    //Edit: Funktioniert perfekt, habe wie du es gesagt hast, daraus eine Funktion gemacht. Für die, die es vielleicht brauchen werden:



    new LineThere[MAX_PLAYERS];


    //onplayerconnect
    LineThere[playerid] = -1;


    forward CheckLine(playerid, filename[], inputtext[], number);


    public CheckLine(playerid, filename[], inputtext[], number) // number 0: inputtext = zahl .... number 1: inputtext = text
    {
    if(IsPlayerConnected(playerid))
    {
    new Data[256];
    new File: hFile = fopen(filename, io_read);
    if( hFile )
    {
    while( fread( hFile, Data, sizeof( Data ) ) )
    {
    StripNewLine( Data );
    if(!Data[0])
    {
    continue;
    }
    if(number == 0)
    {
    if(strval(inputtext) == strval(Data))
    {
    LineThere[playerid] = 1;
    fclose( hFile );
    }
    else
    {
    LineThere[playerid] = 0;
    }
    }
    else if(number == 1)
    {
    if(strcmp(Data, inputtext, true) == 0)
    {
    LineThere[playerid] = 1;
    fclose( hFile );
    }
    else
    {
    LineThere[playerid] = 0;
    }
    }
    }
    fclose( hFile );
    }
    }
    return 1;
    }