Beiträge von d0ma


    das while(fread(...)) geht alleine durch alle Zeilen durch ;)
    lediglich noch eine IF-Abfrage um sicher zu sein das die Zeile nicht leer ist und schon bist du fertig


    new string[64];
    new File:file = fopen("FKassen.ini", io_read);
    new id=0;
    while(fread(file, string))
    {
    if(string[0] != 0 && string[0] != '\n') // zeile nicht leer ?
    {
    FKasse[id] = strval(string);
    id++;
    }
    }

    http://wiki.sa-mp.com/wiki/Fread


    Schau den Teil an: Reading Line-by-Line


    nebenbei: wenn der server die FKassen das zweite mal speichert, dann sind alle Kassen 2 Mal eingetragen da du die Datei mit io_append (anhängen) öffnest:
    new File:File = fopen("FKassen.ini",io_append);


    wenn du io_write verwendest wird die Datei erst geleert und dann mit den neuen FKassen beschrieben:
    new File:File = fopen("FKassen.ini",io_write);

    wenn du ein "\" einfügen willst, musst du ein doppeltes \ schreiben:
    "Logs\\Error.log"


    \ wird als escape-Zeichen verwendet, also quasi:
    "Text \" text geht weiter, obwohl schon ein Anführungszeichen geschrieben wurde"


    mit 2 \\ fügst du ein normales \ Zeichen ein ;)

    HTTP(0, HTTP_GET, "localhost/home.php?name=Beavis&reason=Testzweck", "", "KickPlayer");


    HTTP_GET und die komplette url einfach vorne einfügen ;)


    EDIT: und im php-Code mit $_GET arbeiten


    die Verwendung von mysql um einen Timestamp zu einem Datum umzurechnen ist in PAWN schon WIRKLICH dämlich.
    und in php ERST RECHT dämlich, gibt dazu extra eine Funktion...


    PHP
    date('H:m:s, m.d.y' , $timestamp);


    http://php.net/manual/de/function.date.php

    man braucht doch dafür echt kein sscanf ;)


    ocmd:nummernschild(playerid,params[])
    {
    new len = strlen(params);
    if( len < 1 || len > 2 )
    {
    return SendClientMessage(playerid,clearrot,"Benutze: /nummernschild [2 Buchstaben]");
    }
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER) // ist der spieler überhaupt in einem auto ?
    {
    new string[16];
    format(string,sizeof(string),"LS-%s",params);
    SetVehicleNumberPlate(GetPlayerVehicleID(playerid),string);
    }
    return 1;
    }


    EDIT: Nebenbei: das Fahrzeug muss erst respawnen damit das Nummernschild auch erscheint

    glaub kaum das Arendiums Version oberhalb so klappen wird ;)


    Habe im Prinzip das gleiche schon einmal für meinen Server gebraucht:


    Funktion für Globale TextDraws:
    SetTextDrawDelayString(Text:textid, text[], timePerChar) // by nsg-page.de
    {
    if(text[0] != '\0') SetTimerEx("TextStepByStep", timePerChar, 0, "dsdd", _:textid, text, timePerChar, 1);
    return 1;
    }


    forward TextStepByStep(Text:textid, text[], timePerChar, num);
    public TextStepByStep(Text:textid, text[], timePerChar, num)
    {
    new newText[128];
    format(newText, sizeof(newText), "%s", text);
    if(newText[num] != '\0')
    {
    SetTimerEx("TextStepByStep", timePerChar, 0, "dsdd", _:textid, newText, timePerChar, num+1);
    }
    newText[num] = '\0'; // cut text
    TextDrawSetString(textid, newText);
    }
    Verwendung:
    SetTextDrawDelayString(textdrawid, "Dein Text", 200);


    Funktion für Playerbezogene TextDraws:

    SetPlayerTextDrawDelayString(playerid, PlayerText:textid, text[], timePerChar) // by nsg-page.de
    {
    if(text[0] != '\0') SetTimerEx("PlayerTextStepByStep", timePerChar, 0, "ddsdd", playerid, _:textid, text, timePerChar, 1);
    return 1;
    }


    forward PlayerTextStepByStep(playerid, PlayerText:textid, text[], timePerChar, num);
    public PlayerTextStepByStep(playerid, PlayerText:textid, text[], timePerChar, num)
    {
    new newText[128];
    format(newText, sizeof(newText), "%s", text);
    if(newText[num] != '\0')
    {
    SetTimerEx("PlayerTextStepByStep", timePerChar, 0, "ddsdd", playerid, _:textid, newText, timePerChar, num+1);
    }
    newText[num] = '\0'; // cut text
    PlayerTextDrawSetString(playerid, textid, newText);
    }Verwendung:
    SetPlayerTextDrawDelayString(playerid, textdrawid, "Dein Text", 200);


    sobald dein Bus die Linie ein zweites mal fährt sind die Daten leider gelöscht :(


    EDIT:
    Hier ist der ganze Code ohne dem "num" Parameter, da du den anscheinend gar nicht brauchst ;)
    stock FindNextHaltestelle(Input[])
    {
    new i = 0;

    new result[64], result_num = -1;
    while(Input[i] != '\0')
    {
    if(Input[i] == '\n')
    {
    if(result_num != -1)break;
    result_num = 0;
    i+=1; // setze *i* nach "\n"
    }
    if(result_num > -1)
    {
    result[result_num] = Input[i];
    result_num++;
    }
    i++;
    }
    return result;
    }

    Beavis:
    sobald du deine Funktion einmal ausgeführt hast wird der Inhalt von "BusInfo[code=c][bLable]" bis auf das eine Ergebnis gelöscht ... heißt es Funktioniert nur ein einziges mal deine "bessere" Funktion


    beachte lieber meinen oberen Beitrag, da hatte ich es schon erklärt


    EDIT: nebenbei, das ist nicht aufwendig sofern man Arrays/Zeichenketten komplett verstanden hat. So ein Code ist innerhalb von 2-3 Minuten fertig (schneller als ewig mit strdel zu spielen ;)


    Alle Zeichenketten/Strings werden als original an Funktionen Übergeben ;) heißt wenn du mit strdel arbeitest löscht du einfach den Rest und kannst danach gar keine weitere Haltestelle mehr abrufen, weil die Daten gelöscht wurden (bei Syno: seinem Beispiel der selbe Fehler ;) )


    So sollte es klappen:
    stock FindHaltestelle(Input[], num)
    {
    new num_count = 0, i = 0;

    new result[64], result_num = 0;
    while(Input[i] != '\0')
    {
    if(Input[i] == '\n')
    {
    if(Input[i+1] == '\0')break; // *Input[]* endet mit "\n" (danach ist nichts mehr zu finden) -> BREAK
    num_count++;
    i+=1; // setze *i* nach "\n"
    }
    if(num_count == num)
    {
    result[result_num] = Input[i];
    result_num++;
    }
    i++;
    }
    return result;
    }


    Laut deinem beispiel-text:

    FindHaltestelle(Input[], 0) -> "{FF8400}Buslinie 1:"
    FindHaltestelle(Input[], 1) -> "Bank"
    FindHaltestelle(Input[], 2) -> "Visage Hotel"
    FindHaltestelle(Input[], 3) -> "Airport"
    ...

    Hat viel mit Standort des Servers und den Ping zum Master Server zu tun.


    Eigentlich hat das damit überhaupt nichts zu tun ;)



    Der SA-MP Browser holt die Liste aller Server(5000-7000) von der SA-MP Seite. Der Browser geht dann diese Liste von oben nach unten durch. Wenn der Server weit oben in der Liste ist wird er schneller geladen, wenn er weiter unten ist wird er natürlich später geladen(kann bis zu 15 Minuten dauern bis alle Server geladen sind).
    Die Anordnung der Server-Liste ändert sich alle 10-20 Minuten und diese Anordnung hat nichts mit Ping/Standort zu tun :whistling: