Hey,
ich habe vor kurzem ein neues Projekt begonnen: LiveScript.
LiveScript ist ein Filterscript, welches Script während der Laufzeit ausführen kann.
Dazu habe ich mir eine eigene kleine Syntax-Regelung zusammengestellt, auf welche LiveScript basiert.
Ich weiß nicht ob es sowas in der Art schonmal gegeben hat, aber ich kenne so ein System nur von "Second Life", bei dem man auch Ingame alles selbst scripted.
LiveScript hat derzeit lediglich 429 Zeilen und ist sehr performant gehalten.
Es können dynamisch Callbacks und Funktionen hinzugefügt werden.
Die Definition von Callbacks und Funktionen sieht wiefolgt aus:
new LSCallback[][CallbackInformation] =
{
{"__onscriptexecute_start", "__onscriptexecute_end"}
};
new LSFunction[][FunctionInformation] =
{
{"alert", "is"},
{"die", "is"}
};
Ein Callback ist derzeit so aufgebaut:
Das Script hat einen Handler, der Callbacks bei bestimmten Bedingungen aufruft.
Bspw. kann der Spieler den Callback "__onplayerspawn" verwenden. Sobald dieser im Script verwendet wird, wird er immer dann mit den jeweiligen Parametern aufgerufen, wenn ein Spieler gespawnt wird.
Funktionen sind so änlich aufgebaut.
In der LSFunction-Variable wird zuerst der Function-Name mitgegeben (bspw. "alert") und anschließend die Parameter(-typen). "is" - "integer (playerid), string (text)".
Der Script-Interpreter geht dann jeden Callback durch und ruft die Script Function mit den jeweiligen Parametern auf.
LSFunction_alert(playerid, text[])
{
ShowPlayerDialog(playerid, DIALOG_LS_ALERT, DIALOG_STYLE_MSGBOX, "Achtung", text, "OK", "");
}
Diese Funktion wird dann vom Script-Interpreter bei vorliegendem Aufruf durch CallLocalFunction aufgerufen.
Bspw. würde so ein kleines Spieler-Script aussehen:
#LIVESCRIPT_SCRIPT
__onplayerspawn_start($playerid)
alert("$playerid", "Hallo!")
__onplayerspawn_end
Die groben Syntax-Regeln sind derzeit:
- Variablen müssen immer mit einem $ beginnen.
- Parameter (auch Variablen) müssen immer in Anführungszeichen geschrieben werden.
- Es werden keine Semikolons benötigt.
Der Source Code wird vorerst nicht herausgegeben.
Ich würde mich sehr über Vorschläge, bzw. Syntax-Vorschläge freuen.
Natürlich auch über sonstiges Lob oder Kritik.
Edit: Text erweitert.
Lg.