Kennzeichen System / Polizei KFZ Akte

  • Ich bin gerade dabei ein Kennzeichen System zu erstellen.
    Kennzeichen werden gesetzt, gespeichert, geladen. Nur gibt es jetzt folgende Probleme.


    Wenn man sein Auto zulassen will, sieht es bei mir so aus:

    Code
    1. new KZ = random(9999);
    Code
    1. new string[50];
    2. format(string, sizeof(string), "LS-%d",PCar[playerid][d][P_KZ]);
    3. SetVehicleNumberPlate(PCar[playerid][d][P_VID],string);

    Was, wenn es eine Zahl doppelt gibt und jemand mit einem Befahl das Fahrzeug Orten möchte?




    Ich bräuchte auch noch Hilfe einen Befehl zu erstellen (habe noch nie mit params gearbeitet) damit ein Checkpoint gesetzt wird wo das Fahrzeug mit dem Kennzeichen ist.
    Befehl sollte so aussehen: /locatecar LS-2848 -> Timer der gesetzt wird -> Nach einer Zeit wird der Checkpoint gesetzt. (Der Spieler muss aber in einem Polizei Fahrzeug sein)




    Code
    1. ocmd:locatecar(playerid,params[])
    2. {
    3. return 1;
    4. }


    Freue mich über jegliche Hilfe :)


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

  • Erstmal 2 Fragen:


    • Soll jedes Fahrzeug ein zufälliges Kennzeichen erhalten? Oder nur LSPD Cars?
    • Sollen die Kennzeichen bei jedem Serverstart neu generiert werden oder gespeichert & geladen werden?

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Jedes Fahrzeug was zugelassen wird kriegt ein zufälliges "einmaliges" Kennzeichen. Die LSPD Cars haben damit nichts zu tun. (Normale Bürger Kennzeichen sind 4 Stellig, Staats Fahrzeuge sind 2 Stellig usw.)
    Die Kennzeichen werden gespeichert und geladen das habe ich hinbekommen nur ist jetzt das unprofessionell


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

  • Was, wenn es eine Zahl doppelt gibt und jemand mit einem Befahl das Fahrzeug Orten möchte?

    Einfach checken ob es die Zahl bereits gibt und dann eine neue Random Zahl auswählen?


    Zum Befehl:

    ocmd:locatecar(playerid,params[])
    {
    new kennzeichen[8];
    if(!IsPlayerCop(playerid)) return SendClientMessage(playerid, -1, "Du musst ein Cop sein um diesen Befehl zu verwenden.");
    if(!IsPlayerInCopCar(playerid)) return SendClientMessage(playerid, -1, "Du musst dich in einem Polizeifahrzeug befinden.");
    if(sscanf(params, "s[8]",kennzeichen)) return SendClientMessage(playerid, -1, "/locatecar [Kennzeichen]");


    new car = FindCarByPlate(kennzeichen);
    if(car == -1) return SendClientMessage(playerid, -1, "Es wurde kein Fahrzeug mit diesem Kennzeichen gefunden.");
    new Float:x,Float:y,Float:z;
    GetVehiclePos(car, x, y, z);
    SetPlayerCheckpoint(playerid, x, y, z, 10.0);


    SetTimerEx("DestroyLocateCarCP", 30000, false, "ii", playerid, car);


    return 1;
    }


    forward DestroyLocateCarCP(playerid, car);
    public DestroyLocateCarCP(playerid, car)
    {
    DisablePlayerCheckpoint(plaýerid);
    new Float:x,Float:y,Float:z;
    GetVehiclePos(car, x, y, z);
    SetPlayerCheckpoint(playerid, x, y, z, 10.0);
    return 1;
    }


    FindCarByPlate(kennzeichen[])
    {
    new vehicleid;
    for(new i; i<GetPlayerPoolSize();i++)
    {
    if(!strcmp(PCar[i][d][P_KZ],kennzeichen, true)) //<--- Fahrzeugabfrage vom Kennzeichen des Autos vom Spieler i
    {
    return PCar[i][d][P_VID];
    }
    }
    return -1;
    }


    Musst einige Sachen an deins noch weiter anpassen, da ich nix über dein Script weiß.

    LeonMrBonnie.de


    Scripting

    Ich helfe zu allen Fragen bezüglich PAWN Scripting gerne weiter.

    Auch im Bereich JavaScript und dort der RageMP API helfe ich gern.


    Kontakt

    Konversation: Konversation starten

    Oder eine der Kontaktmöglichkeiten auf leonmrbonnie.de

  • Jetzt blicke ich da durch. Er findet meine Kennzeichen nicht


    Diese sehen wie folgt aus LS-258 z.B



    //EDIT in der Variable P_KZ wird nur die Zahl gespeichert, wie baue ich das mit ein, dass man es mit LS- angeben muss?


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

    Einmal editiert, zuletzt von BrightLeaN ()

  • FindCarByPlate

    Nur mal aus Spaß, dass kann zu einer gefährlichen Funktion werden ^^


    Im worst worst case, sind 500 Spieler online und alle 9999 Autos vergeben.


    Und wir wollen blöderweise eins der letzten Autos checken.


    Das macht 500*9999 String Abfragen, das sind 4.999.500 :D



    Das bedeutet, dein Server würde für ne Sekunde hängen, spammt man den Befehl, wäre er quasi unspielbar und down xD
    Wenn, dann solltest du direkt mit Zahlen arbeiten :D (mit Zahlen sind es immer noch ~200ms)


    Der Witz aber ist, dass der Code nicht einmal funktioniert. Denn wenn der Spieler, dem das Kennzeichen gehört nicht online ist, kann das Auto nicht zugeordnet werden.
    Es wäre hier viel effizienter einen einfachen MySQL Query zu nutzen, mit dem du prüfst, zu wem das eindeutige Kennzeichen gehört :)





    10.000 eindeutig zufällige Zahlen effizient zu generieren, die sich nicht wiederholen, ist gar nicht mal so trivial in Pawn.
    Mir fällt mir ein, entweder y_iterate zu nutzen, oder besser ein eigenes System zu entwickeln.
    Sprich du hast eine Datenbank mit 10.000 Einträgen. Dann wählst du random(n) (wo n die Anzahl der Einträge in der Datenbank ist) aus und löschst diese.
    Dann bist du kannst du dir immer sicher sein, dass das eindeutig ist, und das super effizient.

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S

  • Zitat

    oder besser ein eigenes System zu entwickeln.
    Sprich du hast eine Datenbank mit 10.000 Einträgen. Dann wählst du random(n) (wo n die Anzahl der Einträge in der Datenbank ist) aus und löschst diese.
    Dann bist du kannst du dir immer sicher sein, dass das eindeutig ist, und das super effizient.

    uiiui hört sich alles sehr kompliziert an, kann mir das gerade nicht vorstellen.
    Dachte es wäre nicht so schwer so etwas zu machen.


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

  • Kann dir morgen mal so ein System schreiben, oder direkt eine Include und es generalisieren und mal releasen.


    Gerade nur keine Zeit ^^

    ast2ufdyxkb1.png


    Leute, lernt scripten und versucht mal lieber etwas selber zu schreiben, als es aus einem GF zu kopieren. :S