Inhaltsverzeichnis
Editor-Scripte
Analog zu Command- und Mission-Scripte verfügt auch der EMERGENCY 4 Editor über eine Schnittstelle zum Laden von Scripten. Hierbei ist es möglich, im Editor verschiedene Funktionen auszuführen.Editor-Scripte müssen, um von EMERGENCY erkannt zu werden, im Data-Ordner gespeichert werden. Daher sollte man darauf aufpassen, dass alle Änderungen nur im Editor-Script-Ordner stattfinden! Diese Dokumentation ist möglicherweise unvollständig und / oder fehlerhaft, da sie nicht auf dem offiziellen Script-SDK basiert, sondern durch Reverse Engineering erarbeitet wurde!
Grundstruktur
Die Grundstruktur eines Editorscripts ist ähnlich zu der von Missions- und Commandscripts:Quellcode
- object Example : EditorScript
- {
- Example() //Konstruktor
- {
- }
- ~Example() //Destruktor
- {
- }
- void OnThink() //Wird wiederholt aufgerufen (einmal pro Frame?)
- {
- }
- ScriptResult OnPlaceObject(float x, float y, float z) //Wird aufgerufen, wenn der Benutzer ein Objekt platziert
- {
- }
- ScriptResult OnObjectPlaced() //Wird aufgerufen, wenn der Benutzer ein Objekt platziert hat (die Maustaste nach dem Platzieren loslässt)
- {
- }
- OnFloorClicked(float x, float y, float z) //Wird aufgerufen, wenn der Benutzer auf den Boden klickt
- {
- }
- };
Editor-Scripts müssen als „Data/Scripts/Editor/Kategorie/Name.script“ gespeichert werden, wobei Kategorie und Name frei wählbar sind. Sie werden im Editor unter Scripts→Kategorie→Name aufgerufen.
Spezifische Funktionen, Klassen und Enums
Grundsätzlich verwenden Editor-Scripts natürlich das selbe Scriptsystem, wie Command- und Missionsscripts und können daher alle Elemente des bekannten SDKs verwenden. Zu beachten ist hierbei, dass jedoch nicht alles im Editor möglich ist, da einige Funktionen (z.B. Die „PushAction“-Funktionen der „GameObject“-Klasse) auf das laufende Spiel angewiesen sind.Editor-Script beenden
Editorscripts werden nicht automatisch beendet, sondern über die Funktion „Process::Kill()“.Ein Beispiel:
„Process::Kill()“ verhindert hier, dass das Script im Hintergrund weiterläuft und beim Setzen eines neuen Fahrzeuges dieses sofort wieder löscht.
Objekte platzieren
Es ist ebenfalls möglich, Objekte mit „Game::CreateObject()“, „Game::CreatePerson()“ oder „Game::CreateVehicle()“ zu erstellen!Um den aktuell ausgewählten (an der Maus „hängenden“) Prototypen abzufragen, kann die Funktion „GetMousePrototype()“ verwendet werden, die einen Pointer unbekannten Typs zurückgibt. Dieser kann in einer Variable vom Typ „void*“ gespeichert werden:
void *mousePrototype = GetMousePrototype();
Es ist auch möglich, das noch nicht endgültig platzierte Objekt mit „GetMouseObject()“ abzufragen. Die Funktion gibt einen „Actor“ zurück, der auch in ein „GameObject“ konvertiert werden kann:
Actor mouseActor = GetMouseObject();
GameObject mouseObject(&GetMouseObject());
Um nun ein Objekt zu platzieren wird die Funktion „PlaceObject(void *prototype_, float x, float.y, float.z, float yaw, float pitch, float roll)“ verwendet. So lässt sich zum Beispiel ein Objekt genau in der Kartenmitte platzieren:
PlaceObject(mousePrototype, 0, 0, 0, 0, 0, 0); //Variable stammt aus vorherigen Codebeispielen
PlaceObject(GetMousePrototype(), 0, 0, 0, 0, 0, 0); //Kurzform ohne Variable
1.284 mal gelesen