View Single Post
Old 12.05.2008, 11:56   #1
Mr. Maccaroni
SA:MP Scripter
 
Mr. Maccaroni's Avatar
 
Join Date: Apr 2008
Posts: 53
Post Scripting-Tutorial: Die Grundlagen

Die Grundlagen

Vorwort - In diesem Tutorial zeigen wir Ihnen den Aufbau eines funktionierenden Scripts und die Aufgaben der einzelnen Kategorien - auch "Callbacks" genannt.
Im Laufe des Tutorials werden wir nur noch die fachsprachigen Ausdrücke benutzen, da diese auch generell in den meisten Script-Foren von Gebrauch sind.
Unsere deutschsprachige Scriptvorlage (Template), auch bei uns im Downloadbereich im Serverpack verfügbar, enthält bereits alle wichtigen und standartmäßigen Callbacks, sowie kleine
Einstiegshilfen und Extras.

____________________________________________

Nun aber zum Eigentlichen - Öffnet das Template mit dem PAWN-Editor (Wir empfehlen den meistverwendeten namens "Pawno") und schaut euch das Script ein wenig an.
Nun denkt ihr vielleicht "Da ist aber schon eine Menge gemacht worden.", jedoch täuscht das. Die grünmarkierten Zeilen sind nur kleine Randinformationen. Sie sind im Script
nicht von Gebrauch und sind deshalb "undefinied". Um etwas zu undefinieren setzt man // vor die Zeile bzw. vor die Randinformation. Um mehrere Zeilen zu undefinieren,
setzt man /* am Anfang der Randinformation und */ am Ende der Randinformation (Siehe Bild 1).

1 Randinformationen in 2 verschiedenen Varianten


____________________________________________

Nun sehen wir ziemlich weit am Anfang des Scripts folgendes "#include <a_samp>". Dies definiert die INC-Datei, welche die verfügbaren und im Script zu verwendeten
Funktionen. Die INC-Dateien befinden sich im "include"-Ordner im Installationsverzeichnis des PAWN-Editors. Standartmäßig sind schon einige vorhanden (a_samp.inc,
float.inc, core.inc, ...). Also das "#include <a_samp>" definiert die entsprechende INC-Datei, jedoch gibt es hier einen Sonderfall. Die Includes "a_players", "a_objects", "a_sampdb"
und "a_vehicles" müssen nicht im Script definiert werden, solang "a_samp" definiert wurde. Wenn wir nämlich die a_samp.inc mit dem Texteditor öffnen, sehen wir, dass schon
einige vorhandene Includes in der a_samp.inc definiert sind (Siehe Bild 2).

2 Alle definierten Includes in der "a_samp.inc"


____________________________________________

Weiter im Script treffen wir auf "#define GROVE 0". Dies ist eine Definition eines Werts. Diese Definitionen haben die Aufgabe, Zahlen im Script durch Wörter zu ersetzen,
um sich zum Beispiel Team-ID's oder Skin-ID's besser merken zu können (Kleines Beispiel - Siehe Bild 3).

3 Ein Beispiel zur Verwendung einer Wertdefinition


Also die Definition "FRAUENSKIN" ersetzt die Zahl 13 im Script. Jedoch ist einem das selbst überlassen, ob, wo und wann man eine Definition einbaut (Sie sind nicht notwenig, sondern dienen
der Orientierung im Script und um anstelle einer Zahl ein Wort einzufügen).
Es gibt jedoch noch 2 weitere Definitionsarten - Die Stringdefinitionen (Um Wörter oder einzeilige Texte zu definieren - Strings) und die Hexcode bzw. Pawncodedefinition (Häufig verwendet, um lange
Farbcodes in Chatnachrichten zu ersetzen). Sie werden genau wie bei der Wertdefinition (Siehe Bild 3 und oben) angewendet und geschrieben, jedoch muss man bei der Stringdefinition vor und nach dem zu
ersetzenden String " setzen (anders als bei Variablen in einem String, muss man keinen formaten Text erstellen - Siehe Bild 4).

4 Ein Beispiel zur Verwendung einer Stringdefinition


____________________________________________

Nun die Definitionen abhacken - Weiter geht's im Script.
Dort sehen wir als nächstes "new String[256];" und "new Spielername[256];". Dies sind sogenannte Variablen. Es gibt auch hier wieder 2 verschiedene Arten - "Deklaration" und "Einstellung bzw. Setting".
Deklarationen definieren Variablen mit einem zurzeit noch unbestimmten Wert. Ein Setting dagegen definiert Variablen mit einem bestimmten, jedoch doch Funktionen veränderbaren Wert (Siehe Bild 5).

5 Beispiel einer Deklaration und einer Einstellung bzw. Setting



Variablen können genause verwendet werden, wie eine Definition, nur das deren Wert durch eine Funktion verändert werden kann. Um einen Wert einer Variable in einer Chatnachricht einzublenden, müssen
wir erstmal einen formaten Text erstellen (Siehe Bild 6).

6 Beispiel eines formaten Textes mit der Verwendung von einer Deklaration und einer Einstellung



Ein wichtiger Hinweis - Eine Deklaration sollte stets nur in einer Funktion oder in einer Chatnachricht verwendet werden, wenn ihr zuvor ein Wert bestimmt wurde, ansonsten ist das Ergebnis 0 und somit erscheint auch in der Nachricht eine 0 (Deklarationen sollten möglichst unter der Kategorie "public OnGameModeInit" einen Wert bekommen).
Um einer Variable einen neuen Wert zu definieren, schreiben wir NameDerVariable = Wert; (Beispiel: AnzahlDerAutos = 52;).

____________________________________________

Nun begeben wir uns langsam aber sicher zu den Kategorien - "Callbacks". In Callbacks werden Handlungen und Funktionen (Zum Beispiel Erscheinen einer Nachricht oder Ändern des Wertes einer Variable) gesteuert. Die Handlungen und Funktionen könnt ihr rechts in der Spalte sehen. Dort sind sie nach ihren Includes geordnet, in denen sie sich befinden.

Die Funktionen in einem Callback werden nur ausgelöst, wenn der Callback aktiv ist (Kleines Beispiel - Siehe Bild 7).

7 Beispiel des Callbacks "OnGameModeInit()"


OnGameModeInit() bestimmt die Handlungen, die beim Starten des Servers auftreten, zB. SetGameModeText, SetWeather, uvm. (Die Handlungen treten nur auf, während der Server startet).
Weitere Callbacks und ihre Funktionen:

OnGameModeInit(); - Beim Starten des Servers.
OnGameModeExit(); - Beim Beenden oder Neustarten des Servers.
OnPlayerConnect(playerid); - Beim Verbinden eines neuen Spielers.
OnPlayerDisconnect(playerid, reason); - Beim Verlassen eines neuen Spielers.
OnPlayerSpawn(playerid); - Beim Spawnen eines Spielers.
OnPlayerDeath(playerid, killerid, reason); - Beim Tod eines Spielers.
OnVehicleSpawn(vehicleid); - Beim Spawnen eines Vehikel.
OnVehicleDeath(vehicleid, killerid); - Beim Zerstören eines Vehikel.
OnPlayerText(playerid, text[]); - Beim Senden eines Nachricht.
OnPlayerCommandText(playerid, cmdtext[]); - Beim Senden eines Befehls.
OnPlayerRequestClass(playerid, classid); - Beim Auswählen eines neuen Skins in der Skinauswahl.
OnPlayerEnterVehicle(playerid, vehicleid, ispassenger); - Beim Einsteigen eines Vehikel.
OnPlayerExitVehicle(playerid, vehicleid); - Beim Aussteigen eines Vehikel.
OnPlayerStateChange(playerid, newstate, oldstate); - Beim Ändern des Status (Zu Fuss, Im Auto, Beifahrer, ...)
OnPlayerEnterCheckpoint(playerid); - Beim Betreten eines Checkpoints
OnPlayerLeaveCheckpoint(playerid); - Beim Verlassen eines Checkpoints
OnPlayerEnterRaceCheckpoint(playerid); - Beim Betreten eines Renncheckpoints
OnPlayerLeaveRaceCheckpoint(playerid); - Beim Verlassen eines Renncheckpoints
OnRconCommand(cmd[]); - Beim Senden eines RCON-Befehls.
OnPlayerPrivmsg(playerid, recieverid, text[]); - Beim Senden einer Privatnachricht.
OnPlayerRequestSpawn(playerid); - Beim Spawnen nach der Skinauswahl.
OnObjectMoved(objectid); - Beim Bewegen eines Objekts.
OnPlayerObjectMoved(playerid, objectid); - Beim Bewegen eines Spielerobjects.
OnPlayerPickUpPickup(playerid, pickupid); - Beim Aufsammeln eines Pickups.
OnPlayerSelectedMenuRow(playerid, row); - Beim Bestätigen einer Menüauswahl.
OnPlayerExitedMenu(playerid); - Beim Verlassen eines Menüs.
OnPlayerInteriorChange(playerid, newinteriorid, oldinteriorid); - Beim Ändern des Interiors.

____________________________________________

Wenn ihr mit eurem Script zufrieden seid, kontrolliert es noch einmal und startet den Kompiler mit der F5-Taste oder mit dem
-Button in der Navigationsleiste. Speichert das Script nun im Ordner "gamemodes" unseres SA:MP-Server-Ordners und tragt es in die server.cfg ein. Nun sollten alle Vorbereitungen getroffen sein und ihr könnt euer Script testen.

____________________________________________


Viel Spaß und Erfolg wünscht euch
Mr. Maccaroni und die
San Andreas Script Crew.


Dieses Dokument unterliegt dem © Copyright und deutschen Urheberrecht. Es darf nicht ohne jegliche Angaben von uns veröffentlicht werden. Alle Texte sind selbst erstellt und Eigentum der SA Script Crew.
http://www.SA-Script-Crew.de.tf
__________________
Mr. Maccaroni is offline   Reply With Quote