Hallo Leute, und Herzlich Willkommen zu meinem bis jetzt 4. Tutorial im SA:MP Scripting !
In diesem Tutorial zeige ich euch, wie ihr Kauf Dialoge erstellen könnt, z. B. im Ammu Nation, dass man dort per Dialog Waffen kaufen kann. Und so fangen wir An :
Wir gehen nach oben zu den ganzen #define's, falls ihr keine Dialoge habt macht ihr das so :
#define DIALOG_WAFFENKAUF 1
Aber falls ihr schon Dialoge habt, müsst ihr die Anzahl bestimmen, also wenn ihr jetzt einen z. B. DIALOG_REGISTER 1 habt, müsst ihr jetzt einen DIALOG_WAFFENKAUF 2 machen. Wenn dies geschafft ist müssen wir um überhaupt irgendwie in den Ammu Nation zu kommen, ein Pickup erstellen mit dem wir rein & wieder raus gehen können. Wir erstellen jetzt bei den ganzen globalen Variablen
new ammuenter;
und
new ammuexit;
Jetzt gehen wir entweder in euren Homeserver oder auf samp_debug, ist egal, und saven und sie Positionen vom Eingang, und wo wir DRAUßEN spawnen wollen. Also wir gehen etwas weiter weg vom Eingang und machen dort eine "Draußen-Spawn-Pos" ( mit /save saved man ). Wenn dies geschafft ist gehen wir unter Dokumente -> GTA San Andreas User Files -> SAMP -> savedpositions. Und dort müssten dann eure gesaveden Positionen sein. Ihr kopiert euch die X,Y,Z Koordinate. Hier ein Beispiel ( Was in den Saved Positions sein sollte ) : AddPlayerClass(0,1369.0000,-1279.5754,13.5469,176.8590,0,0,0,0,0,0)
Das blaue sind die X,Y,Z Koordinaten, die kopiert ihr euch raus und macht folgendes unter OnGameModeInit
/*BEISPIEL*/ammuenter=CreatePickup(1559,1,1369.0000,-1279.5754,13.5469);
Die 1559 ist für die ID des Pickups, alle Pickup ID's findet ihr hier
Die 1 steht für den Spawn-Typ des Pickups, diese findet ihr hier
1369.0000,-1279.5754,13.5469 sind wie gesagt, die X,Y,Z Koordinaten.
Jetzt wird aber noch nichts passieren, denn wir müssen definieren, was passieren sollte wenn wir in dieses Pickup rein laufen, dazu gehen wir unter OnPlayerPickupPickup und machen folgendes
if(pickupid==ammuenter)
{
SetPlayerPos(playerid,286.148986, -40.644397,1001.515625);
SetPlayerInterior(playerid,1);
GameTextForPlayer(playerid,"~g~Du hast den Ammu Nation betreten.",3000,3);
}
Mit if(pickupid==... wird abgefragt ob das Pickup das Pickup ist was wir oben definiert haben
SetPlayerPos(playerid,.... erklärt sich von selbst. Die Koordinaten findet ihr hier ( von den Interiors )
SetPlayerInterior(playerid,0); bedeutet, falls der Spieler in einen anderen Interior gesetzt/geportet wird, das dann die Interior ID auch dem Interior entspricht. Die Interior ID's sind ebenfalls auf der Seite, wo auch die Interior Koordinaten sind.
GameTextForPlayer ist ein GameText der für den Spieler angezeigt wird, Pawno rechnet in Millisekunden also 3000 Millisekunden = 3 Sekunden, die 3 steht für die Art der Schrift, die findet ihr hier
Jetzt können wir das Script compilieren, es wird wahrscheinlich ein Warning kommen, das beinhaltet, dass wir ammuexit noch nicht benutzt haben. Das könnt ihr drin lassen. Nun connected ihr auf euren Homeserver und geht nun zum Pickup, und ihr werden in einen Ammu Nation geportet. Jetzt geht ihr auf irgend einen Platz im Ammu Nation wo ihr den Buypoint für den Dialog haben wollt, und den Ausgang ( ammuexit ). Wenn ihr die Positionen gesaved habt, gehen wir wieder ins Script und machen mit dem Exit Pickup wieder genau das gleiche wie mit dem Enter Pickup, bloß die Koordinaten ändern. Das müsst ihr alleine machen ;).
Jetzt können wir auch schon zum wesentlichen rüber.
Den Dialog.
Jetzt müssen wir bei den globalen Variablen wieder eine Variable definieren und die nennen wir mal new ammubuypoint;
Wenn dies geschafft ist, erstellen wir das Kauf Pickup wieder mit ammubuypoint=CreatePickup(1559,1,X,Y,Z);
Jetzt müssen wir wieder unter OnPlayerPickupPickup und machen
if(pickupid==ammubuypoint)
{
ShowPlayerDialog(playerid,DIALOG_WAFFENKAUF,DIALOG_STYLE_LIST,"Ammu Nation Shop","Desert Eagle\nM4\nMP 5\nTec 9","Kaufen","Abbruch");
}
ShowPlayerDialog bedeutet, dass wir einem Spieler einen Dialog vorzeigen.
DIALOG_WAFFENKAUF ist der Dialog den wir oben definiert haben
DIALOG_STYLE_LIST ist der Style des Dialoges
"Ammu Nation Shop" ist die Überschrift
"Desert Eagle\nM4\nMP 5\nTec 9","Kaufen" ist das, was in der Liste drin sein sollte; ACHTUNG Wenn ihr einen Zeilen Umbruch machen wollt müsst ihr \n machen! kein /n!!
"Kaufen","Abbruch" = Kaufen ist der 1. Button und Abbruch ist der 2. Button
Nun, damit der Dialog überhaupt angezeigt wird, und man auch was bekommt gehen wir unter OnDialogResponse und machen dort folgendes
if(dialogid==DIALOG_WAFFENKAUF)
{
if(response==1)
{
switch(listitem)
{
case 0 : // Wenn er Desert Eagle nimmt
{
GivePlayerWeapon(playerid,24,100);
GivePlayerMoney(playerid,-1000);
SendClientMessage(playerid,FARBE,"Du hast dir eine Desert Eagle für 1000$ gekauft.");
}
case 2 : //Wenn er die M4 nimmt
{
GivePlayerWeapon(playerid,31,100);
GivePlayerMoney(playerid,-5000);
SendClientMessage(playerid,FARBE,"Du hast dir eine M4 für 5000$ gekauft.");
}
case 3 : // wenn er die MP5 nimmt
{
GivePlayerWeapon(playerid,29,100);
GivePlayerMoney(playerid,-2500);
SendClientMessage(playerid,FARBE,"Du hast dir eine MP5 für 2500$ gekauft.");
}
case 4 : // wenn er die tec 9 nimmt
{
GivePlayerWeapon(playerid,32,100);
GivePlayerMoney(playerid,-3000);
SendClientMessage(playerid,FARBE,"Du hast dir eine Tec9 für 3000$ gekauft.");
}
}
}
return 1;
}
if(response==1) bedeutet, wenn wir auf kaufen drücken, soll ja was passieren.
switch(listitem) ist die beste Variante, mehrere Items in einen Dialog zu nehmen.
case 0 - case 4 wird im Code erklärt.
Und so einfach geht das auch mit den Dialogen, es kann sein das ich einige Fehler gemacht habe, da ich grade sehr schläfrig bin und die ganze Nacht Battlefield 3 gezockt hab. Bitte klärt mich sofort auf. Ich hoffe euch hat es gefallen
Mit Freundlichen Grüßen GoldHamster
__________________________________________
//Edit : Schrift verbessert
// Edit: Schrift verbessert