Scripting:FAQ
Aus STNE-Wiki
(Unterschied zwischen Versionen)
Arakis (Diskussion | Beiträge) |
K (→Kann ich irgendwo Variablen dauerhaft speichern, z.b. in einer Datei?: jetzt schon) |
||
(Der Versionsvergleich bezieht 9 dazwischenliegende Versionen mit ein.) | |||
Zeile 1: | Zeile 1: | ||
- | + | {{Scriptingmenue}} | |
- | + | __TOC__ | |
- | + | == Welche Scriptsprache wird verwendet um die Scripte auszuführen? == | |
- | + | * Für STNE wurde ein invidueller Interpreter geschrieben, es gibt diesen nirgendwo im Internet. Die Syntax ist ebenfalls eine eigene, sie ist an verschiedene Sprachen angelehnt, primär an Javascript, PHP und Visual Basic. | |
- | |||
- | |||
- | + | == Eine eigene Script-Engine für STNE, ist das nicht etwas sehr aufwendig gewesen? == | |
- | + | * Man zerlege einen Quelltext in Tokens(Token=kleinster logischer Textbaustein innerhalb eines Quelltextes), analysiere die Tokens und generiere daraus CodeCommands und CodeExpressions. Ein Script-Ausführer interpretiert das Script anhand der CodeCommands und CodeExpressions. Wenn ein Script pausiert wird, so wird einfach nur der Call-Stack weggespeichert, welcher die Rücksprungpositionen weiß und die jeweiligen Variablen. | |
- | |||
- | |||
- | + | == Werden die vorhanden Objekte der Script-Engine auch von der eigentlichen STNE-Engine verwendet? == | |
- | + | * Nein. STNE verwendet intern komplett andere Objekte in einer komplett anderen Struktur. | |
- | |||
- | |||
- | + | == Wie sind die aktuellen Klassen der Script-Engine definiert und wie kann man eigene Klassen definieren? == | |
- | + | * Es ist zur Zeit nicht möglich eigene Klassen zu definieren. Vorhanden Klassen sind fest im STNE-Quelltext verankert und repräsentieren intern ein echtes .NET-Objekt. | |
- | |||
- | |||
- | + | == Wäre es möglich Objekte und Klassen zu verwenden, welche nicht für die Script-Engine vorgesehen sind? == | |
- | - | + | * Nein, weil bei jedem Objekt geschaut wird, ob der Objekt-Typ zugelassen ist, auch zur Laufzeit des Scripts. |
- | |||
- | |||
- | + | == Wie wird gewährleistet, dass man nicht fremde Objekte innerhalb der Script-Engine verwendet, z.b. fremde Schiffe steuert? == | |
- | + | * Jedes Objekt prüft selbstständig, ob der Objektbesitzer mit dem aktuellen Spieler-Kontext übereinstimmt bzw. ob dieser Zugriff darauf haben darf. | |
- | Kann ich irgendwo Variablen dauerhaft speichern, z.b. in einer Datei? | + | |
- | + | == Was ist wenn ich eine Endlos-Schleife im Quelltext verursache, hängt dann der ganze Server? == | |
+ | * Im Prinzip hängt nur einer von vier CPU-Kernen. Jedes Script, welches nach 10 Sekunden noch nicht beendet ist, wird terminiert. Wurde öfters erkannt, dass ein Script sehr CPU-Lastig ist, so wird das Script deaktiviert bzw. dem ganzen Spieleraccount die Möglichkeit entzogen, Scripte auszuführen. | ||
+ | |||
+ | |||
+ | == Wieviele Variabeln darf ich definieren und wie groß darf der Speicherverbrauch maximal sein? == | ||
+ | * Du darst so viele Variabeln definieren, wie du sie auch brauchst. Bei jeder Objekterstellung wird der Speicherverbrauch grob geschätzt. Wird in etwa mehr als 10 MB Speicher verbraucht, so wird das Script terminiert. Sollte das Script es schaffen auf grund der groben Schätzung auf 50 MB Speicher zu kommen, so wird automatisch dem aktuellen Spieleraccount die Möglichkeit entzogen, Scripte auszuführen. | ||
+ | |||
+ | |||
+ | == Warum werden Scripte nicht genau zu dem Zeitpunkt ausgeführt, wie eingestellt? == | ||
+ | * Sämtliche Scripte werden intern hintereinander ausgeführt. Auszuführende Scripte werden in eine Warteschlange eingereiht und werden erst dann ausgeführt, wenn alle vorherigen ausgeführt wurden. Die Möglichkeit des Vordrängelns ist ausgeschlossen ;) | ||
+ | |||
+ | |||
+ | == Wie groß darf ein Script maximal sein? == | ||
+ | * Ein Script darf maximal 100 KB groß sein. Dies entspricht ungefähr 2.500 Zeilen Quelltext. Diese Größe sollte mehr als ausreichend sein. | ||
+ | |||
+ | |||
+ | == Mein Script braucht mehr als 10 Sekunden CPU-Leistung, mehr als 10 MB Speicher oder ist größer als 100 KB. Gibt es trotzdem eine Möglichkeit es auszuführen? == | ||
+ | * Du kannst solche Scripte dafür freischalten lassen, dies wird jedoch nur genehmigt, wenn das Script eine nennenswerte Bereicherung für die Community darstellt. Bei der Genehmigung muss eine vernünftige Begründung darliegen, desweiteren wird der Script-Quelltext begutachtet. Wende dich dafür an einen Game-Admin. | ||
+ | |||
+ | |||
+ | == Kann ich irgendwo Variablen dauerhaft speichern, z.b. in einer Datei? == | ||
+ | * Ja, und zwar über das Objekt ''CDataNodeStorage''. | ||
+ | * Siehe auch [http://forum.stne.net/viewtopic.php?p=23639#23639 diesen Thread] im Forum. | ||
+ | |||
+ | [[Kategorie:Scripting| FAQ]] | ||
+ | [[Kategorie:Scripting-Hilfe|FAQ]] |
Aktuelle Version vom 10. November 2007, 17:09 Uhr
fertige Scripte | Anleitungen und FAQ | Überblick über die Scripting-Sektion | Hilfen zum Arbeiten im Wiki |
Welche Scriptsprache wird verwendet um die Scripte auszuführen?
- Für STNE wurde ein invidueller Interpreter geschrieben, es gibt diesen nirgendwo im Internet. Die Syntax ist ebenfalls eine eigene, sie ist an verschiedene Sprachen angelehnt, primär an Javascript, PHP und Visual Basic.
Eine eigene Script-Engine für STNE, ist das nicht etwas sehr aufwendig gewesen?
- Man zerlege einen Quelltext in Tokens(Token=kleinster logischer Textbaustein innerhalb eines Quelltextes), analysiere die Tokens und generiere daraus CodeCommands und CodeExpressions. Ein Script-Ausführer interpretiert das Script anhand der CodeCommands und CodeExpressions. Wenn ein Script pausiert wird, so wird einfach nur der Call-Stack weggespeichert, welcher die Rücksprungpositionen weiß und die jeweiligen Variablen.
Werden die vorhanden Objekte der Script-Engine auch von der eigentlichen STNE-Engine verwendet?
- Nein. STNE verwendet intern komplett andere Objekte in einer komplett anderen Struktur.
Wie sind die aktuellen Klassen der Script-Engine definiert und wie kann man eigene Klassen definieren?
- Es ist zur Zeit nicht möglich eigene Klassen zu definieren. Vorhanden Klassen sind fest im STNE-Quelltext verankert und repräsentieren intern ein echtes .NET-Objekt.
Wäre es möglich Objekte und Klassen zu verwenden, welche nicht für die Script-Engine vorgesehen sind?
- Nein, weil bei jedem Objekt geschaut wird, ob der Objekt-Typ zugelassen ist, auch zur Laufzeit des Scripts.
Wie wird gewährleistet, dass man nicht fremde Objekte innerhalb der Script-Engine verwendet, z.b. fremde Schiffe steuert?
- Jedes Objekt prüft selbstständig, ob der Objektbesitzer mit dem aktuellen Spieler-Kontext übereinstimmt bzw. ob dieser Zugriff darauf haben darf.
Was ist wenn ich eine Endlos-Schleife im Quelltext verursache, hängt dann der ganze Server?
- Im Prinzip hängt nur einer von vier CPU-Kernen. Jedes Script, welches nach 10 Sekunden noch nicht beendet ist, wird terminiert. Wurde öfters erkannt, dass ein Script sehr CPU-Lastig ist, so wird das Script deaktiviert bzw. dem ganzen Spieleraccount die Möglichkeit entzogen, Scripte auszuführen.
Wieviele Variabeln darf ich definieren und wie groß darf der Speicherverbrauch maximal sein?
- Du darst so viele Variabeln definieren, wie du sie auch brauchst. Bei jeder Objekterstellung wird der Speicherverbrauch grob geschätzt. Wird in etwa mehr als 10 MB Speicher verbraucht, so wird das Script terminiert. Sollte das Script es schaffen auf grund der groben Schätzung auf 50 MB Speicher zu kommen, so wird automatisch dem aktuellen Spieleraccount die Möglichkeit entzogen, Scripte auszuführen.
Warum werden Scripte nicht genau zu dem Zeitpunkt ausgeführt, wie eingestellt?
- Sämtliche Scripte werden intern hintereinander ausgeführt. Auszuführende Scripte werden in eine Warteschlange eingereiht und werden erst dann ausgeführt, wenn alle vorherigen ausgeführt wurden. Die Möglichkeit des Vordrängelns ist ausgeschlossen ;)
Wie groß darf ein Script maximal sein?
- Ein Script darf maximal 100 KB groß sein. Dies entspricht ungefähr 2.500 Zeilen Quelltext. Diese Größe sollte mehr als ausreichend sein.
Mein Script braucht mehr als 10 Sekunden CPU-Leistung, mehr als 10 MB Speicher oder ist größer als 100 KB. Gibt es trotzdem eine Möglichkeit es auszuführen?
- Du kannst solche Scripte dafür freischalten lassen, dies wird jedoch nur genehmigt, wenn das Script eine nennenswerte Bereicherung für die Community darstellt. Bei der Genehmigung muss eine vernünftige Begründung darliegen, desweiteren wird der Script-Quelltext begutachtet. Wende dich dafür an einen Game-Admin.
Kann ich irgendwo Variablen dauerhaft speichern, z.b. in einer Datei?
- Ja, und zwar über das Objekt CDataNodeStorage.
- Siehe auch diesen Thread im Forum.