GTAinside.com Foren

GTAinside.com Foren (http://forum.gtainside.com/index.php)
-   Multiplayer (http://forum.gtainside.com/forumdisplay.php?f=85)
-   -   Scripting-Tutorial: Die Grundlagen (http://forum.gtainside.com/showthread.php?t=34192)

Mr. Maccaroni 12.05.2008 11:56

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
http://sa-script-crew.bplaced.net/Home/images/Bild1.png

____________________________________________

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"
http://sa-script-crew.bplaced.net/Home/images/Bild2.png

____________________________________________

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
http://sa-script-crew.bplaced.net/Home/images/Bild3.png

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
http://sa-script-crew.bplaced.net/Home/images/Bild4.png

____________________________________________

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
http://sa-script-crew.bplaced.net/Home/images/Bild5.png


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
http://sa-script-crew.bplaced.net/Home/images/Bild6.png


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()"
http://sa-script-crew.bplaced.net/Home/images/Bild7.png

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
http://sa-script-crew.bplaced.net/Ho...s/Compiler.png-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

kennny94 12.05.2008 12:33

Sehr schön !!!

War sicher en große arbeit aber hat sich gelohnt wie man sieht

Mr. Maccaroni 12.05.2008 12:44

Ich hoffe nur, dass es auch vielen hilft, sonst wäre ja alles umsonst :P

kennny94 12.05.2008 15:59

Naja solange das nichtmal mim Server klappt brauch ich noch nichts mit Pawno zu machen
Logisch !

RemoteC 12.05.2008 17:51

Sehr gut beschrieben :) Ich hoffe, dass sich das viele User zu Herzen nehmen und nicht mehr so oft gefragt wird wie scripten überhaupt funktioniert.

Ich habe mir weiters erlaubt den Titel so zu ändern, dass es noch eindeutiger ist worum es hier geht, und das Thema oben festgepinnt.

mfg

RemoteC

Mr. Maccaroni 12.05.2008 18:06

Ok danke :P
Es werden bald noch mehr kommen, vielleicht schon morgen.
Dort wird dann genauer auf einzelne Segmente eingegangen.

kennny94 12.05.2008 19:27

Könntest du vielleicht i-wie eien Thread amchen wo du genau beschreibst (mit bildern) wie man ein Server erstma erstellt
Weild er andere Thread hilft net wirklich ^^

Mr. Maccaroni 13.05.2008 12:09

Ich fange nachher an :P

tigerinc 14.05.2008 14:12

Hi,
das mit den scripten is schon ne coole sache. Leider komme ich damit gar nicht klar.
Die kleine Einführung is schon gut, aber aber besser wäre es anhand eines kleinen Scriptes.

Ich würde gerne einen kleinen Server machen wollen, für meinen Bruder und mich. Aber wie gesagt; kein Plan wie man das macht. Leider... :(

Mr. Maccaroni 14.05.2008 14:18

Ich kann dir hier jetzt wenig weiterhelfen, aber guck' mal in meine Signatur :P

tigerinc 14.05.2008 15:40

Danke Mr. Maccaroni, werd da mal schauen.

El_Survio 07.08.2009 18:39

sorry das ich den alten thread wieder raushole^^, aber die bilder sind "verschwunden" (warscheinlich gelöscht)... kann mir die jemand wiederherstellen? :D


ansonsten: schönes tutorial :)

johkor 02.09.2009 20:28

Hi,
ich bin auf dieses Forum gestoßen weil ich lernen wollte wie man scriptet. Jetzt ist das Problem das dieses Template ich nicht finden kann. Und deshalb qollte ich fragen ib du mir den Link geben kannst.

Mfg John

randley 01.10.2010 16:27

Ich versteh was nicht
 
ich versteh jetzt nicht wo ich mir die template datei runterladen kann

HAHA6565 16.03.2011 20:08

Man sieht die Beispiele nicht bitte bitte will umedingt die Bilder sehen plssssssssss bitteee bitteeeee


sonst ist alles super aber pls brauche die Bilder


All times are GMT +1. The time now is 02:31.

Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.