Tims Scripting Tutorial! vom N00B zum Pro! [TEIL 2]

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!
    Ja dies ist der 2. Teil meiner Samp Scripting Tutorialreihe!
    Wie auch schon im letzten TuT angekündigt möchte ich gerne mal anfangen mit euch richtig zu scripten bzw. die Anfänge.
    ------ >>> Hier gehts noch einmal zum Teil 1: Klick mich!


    Also legen wir los!
    Wie gesagt kann man ein "public" wie eine Autowerkstatt vergleichen.
    Aber bevor wir damit anfangen möchte ich noch einmal Zeigen wie ihr überhaupt auf euren eigenen Server spielen könnt.
    Wenn ihr es schon wisst überspringt ihr den Textabschnitt einfach.


    Zuerst einmal müsst ihr euren Server starten. Dies macht ihr wieder mit einen Doppelkilick auf eure samp server.exe
    wenn er an ist und das Fenster sich öffnet müsst ihr samp starten (den Server einfach minimieren).
    jetzt müsste sich normalerweise samp öffnen. ihr klickt einfach oben auf das Weiße Häkchen oben links
    im Orangenen Kasten.::




    Dort klickt ihr drauf. Jetzt kommt ein kleines, feines, neues Fenster wo ihr etwas eingeben könnt. Aber wass gebt ihr ein? Klar! eure Ip von eurem Server.
    Gut hier müsst ihr dann eure Ip eingeben un Bestätigen. ... ... Aber! Moment mal!! Woher soll ich den Wissen wie meine Ip lautet?? und dann auch noch die Ip von meinem Server?
    Tja das ist ganz einfach! da die Ip die von eurem lokalen Netzwerk bzw bei eurem computer überall gleich ist und 127.0.0.1 lautet müsst ihr einfach diese eingeben!
    Aber Achtung! Da das eure Ip von EUREM Netzwerk innerhalb EURES Hauses ist, könnt nur ihr auf euren Server :/ . Das andere drauf können ist wieder eine andere Geschichte.
    nun ja habt ihr eure Eingabe bestätigt, so sollte eurer Server nun in der Favoriten liste erschien sein.

    Mit einem Doppelklick sollte man dann ganz einfach Connecten können.



    So das war die Geschichte.
    Lasst uns nun in unser Script gehen. Nun es ist ja in unserem Gamemodeordner erschienen Wenn ihr es dort abgespeichert habt.
    Aber warum denn ein Weißes blatt? heißt das nicht das man es nicht öffnen kann?


    Nun dann gehen wir mal wieder in unseren pawno ordner und öffnen erst einmal das Programm pawno.
    so jetzt gehen wir nicht auf neues Projekt sondern auf Projekt öffnen:



    Und jetzt könnt ihr euer Projekt auswählen das ihr erstellt habt.
    Und nun müsstet ihr es vor euch sehen.
    Nun seht ihr wieder alle publics. Wenn Ihr euch schon im Script umgeguckt habt dann habt ihr villeicht auch schon gesehen dass es ein public gibt das den namen "OnPlayerConnect" besitzt.
    in diesem public möchte ich euch mal den neuen Befehl "SendClientMessage" zeigen. Mit diesem befehl könnt ihr wie mit "print" einen Text anzeigen lassen. Wo ist der Unterschied?
    Klar => SendClientMessage lässt keinen Text in der Konsole anzeigen wie print, sondern lässt einen Text im Chat anzeigen lassen. Den Chat solltet ihr ja kennen.
    Aber wie ist denn SendClientMessage genau aufgebaut? wenn wir Print benutzen schreiben wir das ja so:


    print("Ich bin ein Text der In der Konsole ausgegeben wird");


    Also lasst uns doch erst einmal alles Genau unter die Lupe nehmen:




    So ähnlich Spielt sich das auch mit SendClientMessage ab. Nur bei SendClientMessage haben wir nicht 1 Befehl sondern ganze 3 stück.
    SendClientMessage würde man also so Schreiben:
    SendClientMessage(playerid, 0xFF8200FF, "Ich bin ein Text der im Chat angezeigt wird");



    Das klingt ja doch schon alles verwirrend nicht? Irgendwie ja schon seltsam: Bei print haben wir nur einen Sogenannten "Flag"(Flag ist ein anderes Wort für Eigenschaft bei einem Befehl).
    Aber bei SendClientMessage haben wir ja 3 Flags (Flags werden übrigends durch kommas getrennt). Das liegt daran dass wir in SendClientMessage nicht nur einen Text angeben können, sondern
    auch die Farbe des Textes und den Spieler für dem Der Text angezeigt wird.


    setzen wir unser "Gebilde" mal zwischen die Klammern des Publics "OnPlayerConnect".
    Das müsste dann Ungefähr so aussehen:




    Wichtig!! Hinter jedem Befehl muss ein " ; " gesetzt werden. Dieses zeigt dem System, dass hier ein Befehl endet. Wichtig ist auch noch, dass wir alles immer über das return 1; schreiben.
    (Es gibt auch Ausnahmefälle).
    Also noch einmal zum mitschreiben: Wir haben jetzt Einen Befehl in das Public "OnPlayerConnect" reingesetzt der uns einen Text im Chat anzeigen lässt, wenn wir auf den Server drauf kommen - Logisch!
    denn "OnPlayerConnect" heißt ja auf deutsch soviel, wenn der Spieler auf dem Server kommt. Also rutscht unser System in das public wenn jemand drauf kommt. Und sieht: Aha! da steht SendClientMessage!!
    jetzt muss ich einen Text ausgeben! mit den Eigenschaften die wir festgelegt haben.
    Doch ein paar ungeklärte sachen gäbe es da doch noch: was zum himmels willen bedeutet "playerid" und dann ist im 2. Flag ja auch noch so eine Art Code!.
    Wie ich oben schon gesagt hatte, können wir bestimmen bei welchem spieler der Text erscheinen soll. "playerid" steht in unserem für den Spieler der gerade auf unseren Server Kommt.
    Wenn wir das selbe jetzt mal beispielsweise bei "OnPlayerEnterVehicle" reinschreiben, wäre "playerid" der Jenige der in ein Auto einsteigt. Da könnt ihr ja mal ein bisschen Experimentieren.
    und den Text mal in verschiedene publics rein schreiben und gucken was passiert :) . Ich denke mal dass das dann geklärt wäre. Doch jetzt kommt der Code im 2. Flag.
    Das ist der Farbcode. ??..??..? Wieso brauch man den einen Farbcode???? Warum kann ich nicht einfach schreiben: grün oder blau oder weiß.
    Naja weil der Farbcode sehr genau ist und jede Farbrichtung berücksichtigt. um jetzt aber einen Farbcode herauszufinden, brächtet ihr am besten den Samp Colorpicker.


    ====>> Samp ColorPicker: Download


    Wenn ihr den Installiert habt und mal Startet sieht das ganze so aus:




    Wenn ihr jetzt mal auf "Aktiv" klickt, könnt ihr mit der Maus auf den Farbeistreifen klicken und Enter drücke. Und Tada! der Code wird unten angezeigt.
    den könnt ihr dann in den 2. Flag schreiben bzw. durch meinen ersetzen. Auch da könnt ihr wieder vieles ausprobieren.



    Da will ich mal sagen: Wir haben unsere ersten Zeile Gescriptet.
    Als nächstes möchte ich euch zeigen wie ihr euren Text in einer "Variablen" Speichern könnt.
    Und was ist denn Bitte schön eine Variable? im sinne von Scripten?. Viele kennen es von euch aus Mathematik! Variablen sind platzhalter und so ein zeug....
    so ähnlich ist das hier auch. Zwar ein wenig anders aber brilliant.
    nehmen wir mal an ihr habt 50 mal SendClientMessage in eurem Script stehen.
    und wir wollt jetzt nehmen wir an in jedem Der 50 Befehle immer den Selben Text ausgeben lassen. Ihr habt aber keine lust den jedes mal neu zu schreiben.
    Dafür sind variablen gut nützlich. Doch Voher müsst ihr dem System sagen, dass wir eine Variable erstelleb wollen. Um dieses zu tuhen, müssen wir folgendes machen:
    new Text;


    "new " steht dafür, dass wir jetzt eine neue Variable erstellen wollen. "Text" ist der Name dieser Variable. Wie in Mathematik haben Variablen auch namen z.b. x, y oder a , b.
    Ich habe diese Variable einfach mal "Text" genannt. Ihr könnt sie auch "HansFritz" oder "PeterManfred" etc nennen. Der Name Spielt keine Große rolle ihr solltet ihn halt nur merken können.


    So Die Variable hätten wir erstellt. Jetzt müssen wir nur noch dem System klar machen, dass in Die Variable ein bestimmter Text geschrieben sein soll. Da wir ja wollen, dass die Variable sofort den Text
    annimmt den wir festgelegt habe schreiben wir einfach folgendes in das public "OnGamemodeInit".
    Text = "Test Text";


    Das müsst ihr halt schreiben wie ihr es haben wollt. Ihr müsst dann Text durch den namen eurer Variable ersetzen. und das was zwischen den beiden "" ist wieder der Text den wir voher nicht als Name deklariert haben.
    ähnlich wie bei print. Aber vorerst müssen wir der Variable noch sagen wie viele Zeichen wir maximal verwenden wollen für unseren Text.
    deshalb machen wir new Text; weg und schreiben stattdessen: new Text[25]; Die 25 steht dafür, dass der Text 25 zeichen lang ist oder weniger.
    TIPP: nimmt einfach irgend eine hohe Zahl z.b. 100. Dann braucht ihr euch keine Sorgen machen wegen der Zeichenlänge.
    So habt ihr dass nun gemacht müssen wir nur noch bei SendClientMessage schreiben:


    SendClientMessage(playerid, 0x23FF00FF, Text);


    Der Name "Text" im 3. Flag steht Logischer weise dafür, dass wir die Variable "Text" benutzen.
    Hier noch einmal simpel erklärt:



    -----------------------------


    Das wars! im 3. Teil möchte ich euch noch ein paar Dinge mit Variablen Zeigen (Es wird Interresant ^^)
    Hier gehts zum TEIL 3: \\ Ist noch nicht erscheinen Link kommt bald \\


    Ich entschuldige mich noch einmal für meine Rechtschreibfehler xD. ich hoffe es hat euch ein bisschen weitergebracht!


    MFG Tim

    Einmal editiert, zuletzt von Timtrucker ()

  • haben wir nur einen Sogenannten "Flag"(Flag ist ein anderes Wort für Eigenschaft bei einem Befehl).


    bei SendClientMessage haben wir ja 3 Flags (Flags werden übrigends durch kommas getrennt).


    Vergesst das wort "Flags" wieder...
    Es sind Parameter...
    Parameter Parameter Parameter Parameter Parameter Parameter


    Sieht so aus wie im ersten Tutorial, du "erklärt" etwas, vergisst oder lässt aber alles andere weg was man dazu noch erklären könnte...
    z.B. Hättest du bei dem new Text; erklären können das man eine Integer Variable erstellt und in diesem zusammenhang alle anderen Datentypen...


    Es ist so geschrieben als würde man das "mal eben" jemanden erzählen, aber damit ernsthaft selbstständiges Pawn Programmieren (aka Scripting) zu lernen halte ich für unwahrscheinlich.

  • Wie auch immer es gemeint ist, dir ist schon klar das Pawn eine Objektorientierte (höhere?) Programmiersprache ist die man nicht mal eben so erklären kann?
    Und wenn man schon ein solches Tutorial machen will dann sollte man entweder alles erklären oder es dann doch sein lassen.


    Ziel von Scripting Tutorials sollte es ja am ende sein das der Leser das gelernte anwenden kann um eigenen Code schreiben zu können.
    Aber wenn du von allem nur ein Viertel erklärst oder sogar falsch erklärst, bringt das garnichts...

  • Naja so richtig verstanden hab ichs jetzt net XD, und ich bin sicherlich kein Noob ^^


    #JoKer

  • Ich find's eigentlich ok, sicherlich hätte man hier und da was besser erklären können.
    Trotzdem gebe ich 7/10 , weil es für mich und sicherlich viele nützliche
    Dinge enthält und man einiges dazulernt.


    MfG dj_iceT



    Mapper, Scripter und (Web- und Grafik)-Designer