Vorwort:
Da ich leider feststellen musste, das es wirklich sehr viele Leute gibt, die nicht mal wissen, was ein überhaupt Include ist und wie man diesen, schreibe ich mal ein kleines Tutorials dazu. Erwartet nicht zu viel, da es noch Sonntagmorgen ist. *Ausrede*
Wozu werden Includes verwendet:
Includes sind doof ausgedrückt Funktionen, welche in eine andere Datei gesteckt werden, damit diese den GameMode nicht unnötig vollstopfen.
Diese werden im Kopf des GameModes eingefügt und werden dort auch compilt.
Dies ist eine sehr schöne, moderne und gute Möglichkeit zum schreiben von sogenannten "SelfMade"-GameModes.
Jede Funtkion wird in seine dazugehörige Include gesteckt und direkt im GameMode aufgerufen.
Beispiel:
Normalerweise würde man es im GameMode reinpacken, genauer genau in den dazu erstellten Timer. Dann haben wir da 99 unnötige Zeilen rumstehen, welche das Lesen des GameModes und die Suche nach Fehlern erschweren. Also packt man die Funktion in einen Include und sagt dem Script einfach "BenutzeFunktion();".
Schon führt er die Funktion, welche in der Include festgelegt wurde, aus.
Genau genommen, ist es eigentlich egal, ob man es direkt in den GameMode steckt oder über eine Include laufen lässt, da beides in einer gleichen .amx landet.
Aber, die Gründe dafür habe ich schon oben genannt. Es ist einfach besser zu lesen und viel professioneller. Dann hat man eine .pwn - Datei mit nur 5.000 satt 50.000 Zeilen, wo nur die Funktionen aufgerufen werden. Wenn man dann nun einen Bug hat, weiß man genau wo man suchen muss.
Hat man nun zum Beispiel ein Fehler am Nagelband System, weiß man direkt:"Aha, ich muss jetzt die Nagelnband.ini nach dem Fehler untersuchen, wo ich nur 500 Zeilen habe und das dann schneller lesen kann"
Außerdem verwenden Scripter Includes, damit sie einige Funktionen ganz einfach und ohne viele weitere Eingriffe in den GameMode des Benutzers veröffentlichen können. Diese müssen die heruntergeladene Include einfach in das Script einfügen und "BenutzeFunktion();" ausführen.
Wie binde ich eine Include in meinen GameMode ein:
Das ist ganz einfach und bereits oben beschrieben. In diesem Teil zeige ich es euch aber in der Pawn Sprache.
Als erstes ladet ihr die include runter. Falls es in pastebin veröffentlicht wurde, müsst ihr den Code kopieren und in einer .inc - Datei abspeichern.
Diese Datei verschiebt ihr dann in den Pawno/Includes - Ordner. Dort findet ihr bereits einige andere Includes, welche euch von SAMP zur Verfügung gestellt werden.
Meist sind einige Includes immer oben in eurem GameMode schon vorhanden. Zum Beispiel die samp.inc.
// Standard - Includes
#include <a_samp>
Darunter fügt ihr nur noch die heruntergeladene Include ein:
// Standard - Includes
#include <a_samp>
#include <blitzer>
Es kann aber auch so aussehen, wenn ihr eure Includes in einen weiteren Unterordner aussortieren möchtet:
// GameMode - Includes
#include "unterordner_name/blitzer"
Als nächstes guckt ihr euch die Funktionen an, welche der Spieler euch zur Verfügung stellt.
Bleiben wir bei meinem Blitzer Beispiel *Schleichwerbung* : AddBlitzer(playerid);
Nun erstellt ihr einen Befehl. Davor guckt ihr, ob ihr dmcd oder strcmp verwendet.
Ich zeige es mal für strcmp, da die dcmd Nutzer eigentlich so ein Tutorial garnicht brauchen, weil diese schon erfahrener sind:
if(strcmp(cmd, "/blitzer", true) == 0)
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, 0x33CCFFAA, "[BENUTZUNG:] /blitzer [Funktion]");
SendClientMessage(playerid, 0xffffffff, "Verfügbare Funktionen: add, remove, removeall, count");
return 1;
}
if (!IsACop(playerid)) return SendClientMessage(playerid, COLOR_LIGHTRED, "[ERROR:] Du bist kein Polizist!");
if(strcmp(tmp,"add",true) == 0)
{
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_LIGHTBLUE, "[BENUTZUNG:] /blitzer [add] [Geschwindigkeit] [Radius]");
new b_speed;
b_speed = strval(tmp);
if(b_speed < 20 || b_speed > 180) return SendClientMessage(playerid, COLOR_LIGHTRED, "[ERROR:] Die Geschwindigkeit muss zwischen 20 und 180 km/h liegen!");
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_LIGHTBLUE, "[BENUTZUNG:] /blitzer [add] [Geschwindigkeit] [Radius]");
new b_radius;
b_radius = strval(tmp);
if(b_radius < 5 || b_radius > 50) return SendClientMessage(playerid, COLOR_LIGHTRED, "[ERROR:] Der Radius muss zwischen 5 und 50 Meter liegen!");
AddBlitzer(playerid,b_speed,b_radius);
SendClientMessage(playerid, 0xffffffff, "Ein Blitzer wurde erfolgreich aufgestellt und registriert!");
return 1;
}
else if(strcmp(tmp,"remove",true) == 0)
{
RemoveBlitzer(playerid);
SendClientMessage(playerid, 0xffffffff, "Dieser Blitzer wurde erfolgreich abgebaut und aus der Akte entfernt!");
return 1;
}
else if(strcmp(tmp,"removeall",true) == 0)
{
RemoveAllBlitzer();
SendClientMessage(playerid, 0xffffffff, "Dieser Blitzer wurde erfolgreich abgebaut und aus der Akte entfernt!");
return 1;
}
else if(strcmp(tmp,"count",true) == 0)
{
SendFormattedText(playerid, 0xffffffff, "Es sind momentan %d Blitzer registriert und werden um 4.00 Uhr abgebaut!", CountBlitzer());
return 1;
}
else
{
SendClientMessage(playerid, 0x33CCFFAA, "[BENUTZUNG:] /blitzer [Funktion]");
SendClientMessage(playerid, 0xffffffff, "Verfügbare Funktionen: add, remove, removeall, count");
return 1;
}
}
Include selber erstellen:
Eine Include selber erstellen, ist nicht sehr schwer. Genau genommen sind es einfach die Funktionen, die genauso im GameMode geschrieben werden können.
Damit ihr aber nicht immer den kompletten GameMode compilen musst, um zu gucken, ob in der Include keine Fehler sind, kann man in diese Include ebenfalls andere Includes (a_samp) includen. So könnte eine eigene Include aussehen: PasteBin
Schlusswort:
Ich hoffe, ich konnte euch verdeutlichen, was nun gemeint ist, wenn ihr in diesem Forum das Wort Includes hört.
Nun müsst ihr nicht mehr in Panik geraten