Dialoge richtig erstellen

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
  • 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

    Mit unfreundlichen Grüßen
    Buschmensch

    3 Mal editiert, zuletzt von ParliamenT ()

  • Wenn du Schläfrig bist, geh schlafen und mach ein Tutorial wenn du wieder Wach bist oje.


    Sonst gefällt es mir gut erklärt.

  • Oh gott augenkrebs.



    Ich gib für das Aussehen 0/10.


    Für das scripting -/10 weil ich nix wegen dehn großen schriften erkenne.



    Mach die große kleiner oh gott...



    MFG K44n

    Ich Scripte nicht mehr!
    Signatur zuletzt Aktualiesiert:11.07.2012





    MFG K44n

  • Wie kann ich es machen das der Server erstmal abfragt ob der Spieler überhaupt genug Geld dabei hat?
    Wenn ne Deagle jetzt 1000$ kostet und der Spieler hat nur 500$ dabei, soll er ja nicht ins Minus kommen sondern der Kauf soll abgebrochen werden.


    Mfg

  • if(GetPlayerMoney(playerid) >= 1000) //wenn sein geld 100 oder höher ist..