[0.3c]Numernschillder ändern (Number Plate)

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,


    Heute möchte ich euch zeigen, wie ihr die Nummernschilder (NumberPlates) von den Autos in SA ändert.
    Wichtig: Dieses Tutorial funktioniert nur für SAMP 0.3c (und höher)


    Ich zeige euch jetzt, wie ihr Ingame einen /changeplate Befehl erstellt.
    Zunächst mal braucht ihr in OnPlayerCommandText die Abfrage, ob ein Player /changeplate eingibt.
    Dies sollte klar sein:


    if(!strcmp(cmdtext,"/changeplate",true, 14))
    {


    Dann erstellen wir eine Variable, die die VehicleID von dem Player abfragt:
    new vehiclefid = GetPlayerVehicleID(playerid);


    Diese könnt ihr so nennen wie ihr wollt, ich nenne sie aber nun "vehiclefid", da "vehicleID" in meinem Gamemode schon belegt war.
    Jetzt fragen wir ab, ob der Player genug Zeichen eingegeben hat, dass überhaupt eine Änderung Zustande kommt.
    (also mindestens ein Zeichen für das Nummernschild).


    if(!cmdtext[12])return SendClientMessage(playerid,COLOR_YELLOW,"Du musst mindestens eine Zahl, oder einen Buchstaben eingeben!(Z.b /changeplate XGF 113)");


    Jetzt kommt noch die Abfrage rein, ob der Player zurzeit in einem Auto sitzt, sodass das Nummernschild dieses Autos geändert werden kann.


    if(IsPlayerInAnyVehicle(playerid) == 1)
    {


    Nach dieser Abfrage, kommt nun der eigentliche Code, mit dem was passieren soll.


    new string[9];
    format(string,sizeof(string),"%s",cmdtext[14]);


    Hierbei wird ersteinmal der String Definiert, indem nachher das geänderte Nummernschild sitzt.
    Der String hat absichtlich nur 9 Bytes, oder auch Zeichen, weil das Nummernschild genau exakt diese Länge hat.
    Ich weiß, die Pawn kenner, werden es auch gut anders hinbekommen, mit einer schönen Abfrage davor, aber ich habe es nun "Manuell" gemacht.


    SetVehicleNumberPlate(vehiclefid, string);


    Und genau hier wird das Nummernschild gesezt, dass dem string von Oben gleicht.
    Damit das ganze aber wirksam zu sehen ist, muss man das Auto noch Respawnen lassen:


    SetVehicleToRespawn(vehiclefid)


    Nun steht das Auto aber noch an seinem Spawn Punkt, wo du dann erst noch hinlaufen muss.
    Dafür gibt es eine Abhilfe:


    new Float: X,Float: Y,Float: Z;
    GetPlayerPos(playerid,X,Y,Z);


    Dieser Code nimmt die Position von dir, oder einem anderen Spieler auf.


    SetVehiclePos(vehiclefid,X,Y,Z);


    Hier wird dann das Auto zum Player Teleportiert.

    PutPlayerInVehicle(playerid,vehiclefid,0);
    Und hier wird der Player wieder in das Auto gesetzt.


    Zum schluss noch die "else", oder auch "falls nicht", das dem Player eine Nachricht schickt, dass er in einem Auto sein muss.
    }
    else
    {
    SendClientMessage(playerid,COLOR_GREEN,"Du musst dafür in einem Auto sitzen.");
    }




    Und hier nocheinmal der ganze Befehl:


    }
    if(!strcmp(cmdtext,"/changeplate",true, 14))
    {
    new vehiclefid = GetPlayerVehicleID(playerid);
    if(!cmdtext[13])return SendClientMessage(playerid,COLOR_YELLOW,"Du musst mindestens eine Zahl, oder einen Buchstaben eingeben!(Z.b /changeplate XGF 113)");
    if(IsPlayerInAnyVehicle(playerid) == 1)
    {
    new string[9];
    format(string,sizeof(string),"%s",cmdtext[14]);
    SetVehicleNumberPlate(vehiclefid, string);
    SetVehicleToRespawn(vehiclefid);
    new Float: X,Float: Y,Float: Z;
    GetPlayerPos(playerid,X,Y,Z);
    SetVehiclePos(vehiclefid,X,Y,Z);
    PutPlayerInVehicle(playerid,vehiclefid,0);
    }
    else
    {
    SendClientMessage(playerid,COLOR_GREEN,"Du musst dafür in einem Auto sitzen.");
    }
    return 1;


    Wer COLOR_YELLOW nicht hat, der hat es dann jetzt:


    #define COLOR_YELLOW 0xFFFF00AA



    Ich hoffe euch hat mein Tutorial gefallen, und ihr wisst nun ein bisschen mehr über SAMP 0.3c, und dessen Nummernschilder.
    Wer selber kein Script erstellen möchte, sondern diese Befehl gern Online testen möchte, kann das auf dem XGF-TestServer tun: xgf-fun.de:7778 .


    Zu Guter Letzt noch ein Screenshot:



    ©2010,Cedii @ XGF-Fun.de



    //Edit 1&2: Siehe Post unten, ein Fehler entdeckt ;) .//Edit3 Bug Fixxed.

  • Ja kein Problem.
    Und @Alle die sich das jetzt schon eingefügt haben:


    Bitte ändert:


    if(!cmdtext[13])return SendClientMessage(playerid,COLOR_YELLOW,"Du musst mindestens eine Zahl, oder einen Buchstaben eingeben!(Z.b /changeplate XGF 113)");
    in
    if(!cmdtext[12])return SendClientMessage(playerid,COLOR_YELLOW,"Du musst mindestens eine Zahl, oder einen Buchstaben eingeben!(Z.b /changeplate XGF 113)");


    um.


    Danke ;) . Ist ein kleiner Bug gewesen, aber jetzt funktioniert alles.

  • es gibt nur ein problem wenn ich als beifahrer /changeplate eingebe schmeiße ich den fahrer raus und das ist doof man soll es nur als fahrer können

  • jop geht thx
    //Edit: Noch ne Frage :D wie mache ich das beim server restart imme rnoch die nummernschilder so heißen wie user se bei den autos genannt haben.
    Danke schonmal
    bacardi

    Einmal editiert, zuletzt von Bacardi® ()

  • jop geht thx
    //Edit: Noch ne Frage :D wie mache ich das beim server restart imme rnoch die nummernschilder so heißen wie user se bei den autos genannt haben.
    Danke schonmal
    bacardi


    Dafür brauchst du ein "Car System", oder halt eine Speicherung in Dini (.ini).

  • nunja nicht schlecht..
    also so 8/10 jedoch finde ich es etwas zu früh denn bei ein Release nummer 2 von 0.3 könnte das Nummernschuld schon wieder draußen sein.
    Ich würde mit den Tutorials erst warten bis der End Release ist.

    „Auge um Auge - und die ganze Welt wird blind sein.“
    - Mahatma Gandhi

  • wie mache ich das bei dem hier ?
    [ FILTERSCRIPT ] DT_DynamicCar [Ver.: 1.2.1]


    Das kann ich dir nicht sagen, da ich mit dem CarSystem noch nie etwas gemacht habe, geschweige denn es bis jetzt vorher wirklich kannte.
    Ich hoffe ein Kenner dieses Systems wird dir dabei helfen, es dort einzufügen.
    Ich werde das ganze als mein eigenes Car System herstellen ;) .

  • Dog
    Ich denke eher nicht, da kye dass ja bei der 0.3c Ankündigung als Feature dazu geschrieben hat denke ich wohl kaum dass er es wieder rausnimmt.

    nun absofort ist es öffentlich wenn andere jetz bugs endecken die vllt. erstmal nicht lösbar sind kann sowas ganz bestimmt wieder entfernt werden.
    Aber das Tutorial ist trozdem gut nur wie gesagt... Ist blöd wenn man sich die mühe macht und es danach aufgrund XY entfernt wird.

    „Auge um Auge - und die ganze Welt wird blind sein.“
    - Mahatma Gandhi

  • kann ich das auch komplett speichern das jedes einzelene nummershcild von jedem auto gespeichert wird?

  • if(!strcmp(cmdtext,"/changeplate",true, 12))
    {
    for(new i = 1; i < sizeof(CarInfo); i++)
    {
    if(!cmdtext[13])return SendClientMessage(playerid,COLOR_YELLOW,"Dein Nummernschild muss mind. 1 Zahl & 1 Buchstabe haben!(Bsp. OG 152)");
    if(IsPlayerInAnyVehicle(playerid) == 1)
    {
    new string[9];//153
    format(string,sizeof(string),"%s",cmdtext[13]);
    SetVehicleNumberPlate(i, string);
    SetVehicleToRespawn(i);
    new Float: X,Float: Y,Float: Z;
    GetPlayerPos(playerid,X,Y,Z);
    SetVehiclePos(i,X,Y,Z);
    CarInfo[i][cPlate] = string;//160
    PutPlayerInVehicle(playerid,i,0);
    }
    else
    {
    SendClientMessage(playerid,COLOR_GREEN,"Du musst dafür in einem Auto sitzen.");
    }
    }
    return 1;
    }
    Das sollte mein Nummernschild speichern, aber habe einen Error!
    C:\Users\Mario\Desktop\Carsystem.pwn(153) : warning 219: local variable "string" shadows a variable at a preceding level
    C:\Users\Mario\Desktop\Carsystem.pwn(160) : error 006: must be assigned to an array
    Pawn compiler 3.2.3664 Copyright (c) 1997-2006, ITB CompuPhase



    1 Error.

  • wie mache ich das bei dem hier ?
    [ FILTERSCRIPT ] DT_DynamicCar [Ver.: 1.2.1]


    Am besten gar nicht xD.


    Sobald 0.3c komplett raus ist und nicht nur die scripting version mit max. 20 slots wird ein update mit einer solchen Funktion und ein paar weiteren, welche dank 0.3c möglich sind.

  • Momentan garnicht.
    Ich denke aber es wird beim release möglich sein.


    Oder sobald du "SetVehicleNumberPlate" benutzt, speicherst du das Kennzeichen und kannst dir dann deine eigene GetVehicleNumberPlate bauen ^^

    Miete mich (nicht) :love: