Scheine an Fahrzeugen zuordnen und abfragen

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
  • Danke dir! @Kevin_CaruZo


    Habe bei dem /Scheine Befehl noch etwas hinzugefügt und zwar Anmerkungen wo z.b Schein Sperren stehen ( Zeile 35. )


    hat einer Ahnung wie ich z.b das Datum abfrage und dies da anzeigen lasse und genauso wie es mit der Restzeit sein soll wie soll diese angezeigt werden habe 0 Plan gerade wäre nett :)


    Außerdem soll es möglich sein die Scheine einen anderen Spieler zu zeigen mit einfach /Scheine 1 (ID 1 ) das habe ich auch noch nie gemacht.

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Beim Sperren, speichere die Zeit so:
    pInfo[playerid][pAutosperre] = gettime();
    Im Befehl zum Auslesen, nutze: http://forum.sa-mp.com/showthread.php?t=347605
    Beachte dort auch den Korrekturhinweis von mir auf Seite 8: http://forum.sa-mp.com/showpost.php?p=3807026&postcount=72


    Dann kannst du damit das Datum so anzeigen:
    format(string, sizeof(string), "... Erteilt am: %02d.%02d.%d", day, month, year);


    Bezüglich der Restzeit, diese kannst du wie folgt errechnen:
    new seconds = pInfo[playerid][pAutosperreBis] - gettime();
    new days = seconds / 86400;
    seconds -= days * 86400;
    new hours = seconds / 3600;
    seconds -= hours * 3600;
    new minutes = seconds / 60;
    seconds -= minutes * 60;
    format(string, sizeof(string), "... Noch gesperrt: %d Tage, %d Stunden, %d Minuten, %d Sekunden", days, hours, minutes, seconds);
    Falls pAutoSperreBis kleiner gleich gettime ist, liegt keine Sperre mehr vor.


    Die Festlegung der Sperrzeit an entsprechender Stelle wie folgt (beispielsweise):
    pInfo[playerid][pAutosperreBis] = gettime() + ANZAHL_TAGE * 86400;



    Um im Scheine Befehl eine andere playerid auszulesen, musst du die playerid über z.B. sscanf oder strtok auslesen.
    Schaue zuerst, ob du in deinem Code bereits einen Befehl hast, mit dem eine andere playerid, angesprochen werden kann, um zu prüfen, welches System genutzt wird. In gleicher Weise kannst du das dann umsetzen.

  • Erstmal großes Danke das du dir die Zeit genommen hast!♥
    Woah das überfordet mich grade ziemlich vor allem der Befehl zum Auslesen


    So das habe ich schon einmal hinzugefügt.

    Code
    format(string, sizeof(string), "%s\n\n{FFFFFF}Zusätzliche Anmerkung:", string);
    	new seconds = pInfo[playerid][pAutoRestzeit] - gettime();
    	new days = seconds / 86400;
    	seconds -= days * 86400;
    	new hours = seconds / 3600;
    	seconds -= hours * 3600;
    	new minutes = seconds / 60;
    	seconds -= minutes * 60;
    	if(pInfo[playerid][pAutosperre]) format(string, sizeof(string), "%s\n  •Erteilte Autoschein Sperre am %d, Restzeit: %d Stunden & %d Minuten", string,pInfo[playerid][pAutoDatum], days, hours, seconds);


    Beim Auslesen was du mir da geschickt hast verstehe ich irgendwie gar nicht.




    Code
    {
    								SendClientMessage(i, 0xFF0000FF, "Dein Autoschein wurde dir enzogen da du die maximale Anzahl an Punkten überschritten hast!");
    								SendClientMessage(i, 0xFF0000FF, "Somit hast du eine Scheinsperre von 3 Tagen erhalten.");
    								pInfo[i][pAutoschein] = 0;
    								pInfo[i][pAutoDatum] = gettime();
    								pInfo[i][pAutoRestzeit] = gettime() + 3 * 86400;
    							}

    Wäre das so richtig?


    Und zu der Sccanf frage habe ich gar nicht im Script also noch nie damit gearbeitet .

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • So das habe ich schon einmal hinzugefügt.

    Baue den Teil mit TimestampToDate noch ein, sonst passt das mit der Anzeige des Sperr-Datums nicht.



    Wäre das so richtig?

    Ja, allerdings noch zusätzlich:
    pInfo[playerid][pAutosperre] = 1;



    Und zu der Sccanf frage habe ich gar nicht im Script also noch nie damit gearbeitet .

    https://github.com/maddinat0r/sscanf/releases


    Dann im Befehl:
    if(sscanf(params, "u", pID)) return SendClientMessage(playerid, 0xFF0000FF, "Benutze: /scheine [playerid]");


    Dann kannst alles in den Arrays (sprich "[playerid]") zu "[pID]" ändern.
    pID ist dann die playerid, die eingegeben wurde.

  • Baue den Teil mit TimestampToDate noch ein, sonst passt das mit der Anzeige des Sperr-Datums nicht.

    Ich verstehe genau das nicht was soll ich einbauen? Also ich habe das Include schon alles drin aber vom Code her wie? Kann mir gar nichts vorstellen auch an den Beispielen die gezeigt werden wie kann ich das hiermit zusammenhängen?

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • if(pInfo[playerid][pAutosperre]) format(string, sizeof(string), "%s\n •Erteilte Autoschein Sperre am %d, Restzeit: %d Stunden & %d Minuten", string,pInfo[playerid][pAutoDatum], days, hours, seconds);


    zu:


    new year, month, day, hour, minute, second;
    TimestampToDate(pInfo[playerid][pAutoDatum], year, month, day, hour, minute, second, 2);
    if(pInfo[playerid][pAutosperre]) format(string, sizeof(string), "%s\n •Erteilte Autoschein Sperre am %02d.%02d.%d, Restzeit: %d Tage, %d Stunden & %d Minuten", string, day, month, year, days, hours, minutes);


    Gegebenenfalls musst du die 1 am Ende von TimestampToDate noch anpassen, falls die Uhrzeit nicht passt. Das ist der GMT-Offset. Aktuell sind wir bei GMT+2 auf Grund der Sommerzeit. Je nach dem wie dein Server konfiguriert ist, muss das eventuell erhöht oder verkleinert werden.

  • Hey danke dir!♥



    http://prntscr.com/j6zulg


    Irgendwie ist auch nicht alles untereinander kriege Kopfschmerzen wenn ich hier nach einem \n zu viel suche,
    Also unter den Anmerkungen wird zus. auch nichts gezeigt.

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

  • Danke dir!♥,




    Code
    new seconds = pInfo[playerid][pAutoRestzeit] - gettime();
    	new days = seconds / 86400;
    	seconds -= days * 86400;
    	new hours = seconds / 3600;
    	seconds -= hours * 3600;
    	new minutes = seconds / 60;
    	seconds -= minutes * 60;
    	new year, month, day, hour, minute, second;
    	TimestampToDate(pInfo[playerid][pAutoDatum], year, month, day, hour, minute, second, 2);
    	if(pInfo[playerid][pAutosperre]) format(string, sizeof(string), "%s\n{C45461} | %02d.%02d.%d | •Autoschein Sperre (%d:%d:%d)", string, day, month, year, hours, minutes, seconds);

    Wie mache ich das am besten das wenn die Zeit abgelaufen ist die Autosperre auf 0 gesetzt wird mit einem Timer welche Zeit empfiehlt sich da am besten?

    wm2c6p1.png
    Ich weiß, dass ich weiß, dass ich nichts weiß.

    Einmal editiert, zuletzt von Jameso ()

  • Wie mache ich das am besten das wenn die Zeit abgelaufen ist die Autosperre auf 0 gesetzt wird mit einem Timer welche Zeit empfiehlt sich da am besten?

    Ich würde einen Timer von einer Minute nehmen, der einen Loop für alle Spieler drin hat.
    Zusätzlich kannst du das public ja aufrufen, wenn jemand den Befehl oben ausführt, damit es keine negativen Zeiten anzeigt. Falls dann jemand den Befehl eingibt, und er gerade 10 Sekunden drüber ist, dann wird der Timer ausgeführt und er wird entsperrt, bevor der Dialog angezeigt wird.