Ja, vollkommen richtig, ich bin neu hier im Board. Und nicht nur das, ich bin auch noch ein totaler Anfänger was das Scripten betrifft. Dennoch möchte ich Euch gerne einmal zeigen, was ich heute Nachmittag gemacht habe. Ich freue mich über jedes Feedback und jeden konstruktiven Gedanken, bewertet das Ganze bitte.
Zum Thema selber: Ich versuche mich gerade an einem eigenen RL-Server. Neben diversen anderen Comannd's habe ich heute Nachmittag ein simples Script für ein Autohaus geschrieben. Es ist nicht wirklich besonders, man kann ein Auto über ein Menü spawnen, das aufgerufen wird wenn man ein Pickup betritt. Das Auto selbst wird dann an einem im Script festgelegten Ort gespawnt. Sollte man den Kaufpreis nicht in Bar besitzen, reagiert das Script mit einer Meldung - das Auto wird folglich auch nicht gespawnt.
Das hier müsst Ihr unter den #defines platzieren. Es erzeugt den Platz für Pickup und Menü.
new OttoPickup;
new Menu:OttoMenu;
Jetzt erstellen wir aber das eigentliche Pickup sowie das Menü. Ich habe verschiedene Modelle zur Auswahl eingefügt. Ich gehe hier einmal nicht weiter auf die einzelnen Parameter ein, die sollte man eigentlich kennen.
OttoPickup = CreatePickup(1274, 1, -1658.2512,1207.5952,7.2500);
OttoMenu = CreateMenu("Otto's Sportwagen", 2, 200.0, 100.0, 150.0, 150.0);
AddMenuItem(OttoMenu, 0, "Bullet");
AddMenuItem(OttoMenu, 0, "Banshee");
AddMenuItem(OttoMenu, 0, "Infernus");
AddMenuItem(OttoMenu, 0, "Cheetah");
AddMenuItem(OttoMenu, 0, "Turismo");
AddMenuItem(OttoMenu, 0, "Super GT");
AddMenuItem(OttoMenu, 1, "65.000 $");
AddMenuItem(OttoMenu, 1, "80.000 $");
AddMenuItem(OttoMenu, 1, "115.000 $");
AddMenuItem(OttoMenu, 1, "135.000 $");
AddMenuItem(OttoMenu, 1, "140.000 $");
AddMenuItem(OttoMenu, 1, "150.000 $");
return 1;
}
Da ich das Menü nicht über ein Command aufrufe, sondern durch ein Pickup erscheinen lasse, setze ich Folgendes in den Callback OnPlayerPickUpPickup ein, um das Menü aufrufen zu können.
public OnPlayerPickUpPickup(playerid, pickupid)
{
ShowMenuForPlayer(OttoMenu, playerid);
}
Kommen wir zum eigentlichen Teil des Ganzen. Dem Auswählen der Autos und den daraus resultierenden Aktionen, Rückmeldungen, etc. Dieser Teil des Scriptes wird im Callback OnPlayerSelectedMenuRow eingefügt.
public OnPlayerSelectedMenuRow(playerid, row)
{
new Menu:CurrentMenu = GetPlayerMenu(playerid);
if(CurrentMenu == OttoMenu)
{
switch(row)
{
case 0: //Bullet
if (IsPlayerConnected(playerid))
{
if (GetPlayerMoney(playerid) >= 65000)
{
CreateVehicle(541,-1706.5662,1208.4026,25.1070,90.0,6,0,60000);
GivePlayerMoney(playerid, -65000);
SendClientMessage(playerid, INFORMATION, "Du hast ein Auto gekauft! Hole es ab!");
}
else
{
SendClientMessage(playerid, ERROR, "Du hast nicht genügend Geld!");
}
}
case 1: //Banshee
if (IsPlayerConnected(playerid))
{
if (GetPlayerMoney(playerid) >= 80000)
{
CreateVehicle(429,-1706.5662,1208.4026,25.1070,90.0,6,0,60000);
GivePlayerMoney(playerid, -80000);
SendClientMessage(playerid, INFORMATION, "Du hast ein Auto gekauft! Hole es ab!");
}
else
{
SendClientMessage(playerid, ERROR, "Du hast nicht genügend Geld!");
}
}
case 2: //Infernur
if (IsPlayerConnected(playerid))
{
if (GetPlayerMoney(playerid) >= 115000)
{
CreateVehicle(411,-1706.5662,1208.4026,25.1070,90.0,6,0,60000);
GivePlayerMoney(playerid, -115000);
SendClientMessage(playerid, INFORMATION, "Du hast ein Auto gekauft! Hole es ab!");
}
else
{
SendClientMessage(playerid, ERROR, "Du hast nicht genügend Geld!");
}
}
case 3: //Cheetah
if (IsPlayerConnected(playerid))
{
if (GetPlayerMoney(playerid) >= 135000)
{
CreateVehicle(415,-1706.5662,1208.4026,25.1070,90.0,6,0,60000);
GivePlayerMoney(playerid, -135000);
SendClientMessage(playerid, INFORMATION, "Du hast ein Auto gekauft! Hole es ab!");
}
else
{
SendClientMessage(playerid, ERROR, "Du hast nicht genügend Geld!");
}
}
case 4: //Turismo
if (IsPlayerConnected(playerid))
{
if (GetPlayerMoney(playerid) >= 140000)
{
CreateVehicle(451,-1706.5662,1208.4026,25.1070,90.0,6,0,60000);
GivePlayerMoney(playerid, -140000);
SendClientMessage(playerid, INFORMATION, "Du hast ein Auto gekauft! Hole es ab!");
}
else
{
SendClientMessage(playerid, ERROR, "Du hast nicht genügend Geld!");
}
}
case 5: //Super GT
if (IsPlayerConnected(playerid))
{
if (GetPlayerMoney(playerid) >= 150000)
{
CreateVehicle(506,-1706.5662,1208.4026,25.1070,90.0,6,0,60000);
GivePlayerMoney(playerid, -150000);
SendClientMessage(playerid, INFORMATION, "Du hast ein Auto gekauft! Hole es ab!");
}
else
{
SendClientMessage(playerid, ERROR, "Du hast nicht genügend Geld!");
}
}
}
}
}
Was ich hier gemacht habe lässt sich relativ leicht erklären: Zuerst lasse ich mir vom Server die aktuelle ID des Spielers zurückliefern. Daraufhin prüfe ich, ob der Spieler genug Geld besitzt, um sich den entsprechenden Wagen kaufen zu können. Hier kann man später im Script auch den Kaufpreis festlegen. Nun gibt es zwei Optionen:
- Der Spieler hat genug Geld. Sein Wagen wird nun am festgelegten Spawnpoint erstellt. Daraufhin verändert das Script sein Geld um den Kaufpreis (natürlich mit - davor). Anschließend lasse ich noch eine einfache Textmeldung ausgeben, dass das Auto erstellt wurde und er es abholen kann.
- Der Spieler hat nicht genug Geld. Es wird eine Meldung ausgegeben, dass er nicht genug Geld besitzt. Es wird kein Wagen gespawnt!