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.