1 Editor-Scripts
Similar to command and mission scripts, the EMERGENCY 4 editor also has an interface for loading scripts. Here, it is possible to perform various functions in the editor.
Editor scripts must be saved in the Data folder to be recognized by EMERGENCY. Therefore, make sure that all changes are made in the editor script folder! This documentation may be incomplete and / or flawed because it is not based on the official script SDK, but was developed by reverse engineering!
1.1 Basic Structure
The basic structure of an editor script is similar to that of mission and command scripts:
object Example : EditorScript
{
Example() //constructor
{
}
~Example() //destructor
{
}
void OnThink() //Is called repeatedly (once per frame?)
{
}
ScriptResult OnPlaceObject(float x, float y, float z) //Invoked when the user places an object
{
}
ScriptResult OnObjectPlaced() //Invoked when the user has placed an object (the mouse button is released after placing)
{
}
OnFloorClicked(float x, float y, float z) //Invoked when the user clicks on the ground
{
}
};
Display More
An object, which is derived from the class Editor Script and in this case is called "Example", whereby the name is of course freely selectable. However, it does not have to be unique, the script is identified by its file path. The example shows all definable functions, but of course not all have to be defined.
Editor scripts must be saved as "Data/Scripts/Editor/Category/Name.script", with the category and name freely selectable. They are executed in the editor under Scripts → Category → Name.
1.2 Specific functions, classes, and enums
In principle, editor scripts naturally use the same script system, such as command and mission scripts, and can therefore use all elements of the known SDK.
Please note, however, that not everything in the editor is possible, as some functions (e.g. the „PushAction“-functions of the „GameObject“-class) depend on the running game.
1.2.1 Terminate the editor script
Editor Scripts are not terminated automatically, but via the Process „Process::Kill()“.
An example:
object DeleteVehicles : EditorScript
{
void OnThink()
{
GameObjectList l(TYPE_VEHICLE);
for(int i = 0; i < l.GetNumObjects(); i++)
Game::RemoveGameObject(l.GetObject(i));
Process::Kill();
}
};
„Process::Kill()“ prevents the script from running in the background and deletes it immediately when a new vehicle is set.
1.2.2 Place objects
It is also possible to create objects with „Game::CreateObject()“, „Game::CreatePerson()“ or „Game::CreateVehicle()“!
To query the currently selected (mouse-hanging) prototypes, you can use the „GetMousePrototype()“ function that returns a pointer of unknown type. This can be stored in a variable of type "void *":
void *mousePrototype = GetMousePrototype();
It is also possible to query object that has not yet been placed with „GetMouseObject()“ . The function returns an "Actor", which can also be converted to a "GameObject":
Actor mouseActor = GetMouseObject();
GameObject mouseObject(&GetMouseObject());
To place an object, the „PlaceObject(void *prototype_, float x, float.y, float.z, float yaw, float pitch, float roll)“ function is used. For example, an object can be positioned precisely in the center of the map:
PlaceObject(mousePrototype, 0, 0, 0, 0, 0, 0); //Variable is from previous code examples
PlaceObject(GetMousePrototype(), 0, 0, 0, 0, 0, 0); //Short form without variable