PDA

View Full Version : Änderung der Scripting-Syntax zu c#



Arakis
05-03-2012, 03:23
Hallo,
es ist zwar noch nicht in Stein gemeißelt, aber mit großer Wahrscheinlichkeit wird es bald möglich sein, C# (.NET) als Scriptsprache zu verwenden. Eine Dual-Unterstützung (LarneScript+C#) wird zwar in Erwägung gezogen, wird es aber nur mit sehr geringer Wahrscheinlichkeit geben, da die C# Ausführung und die LarneScript Ausführung einen komplett anderen Weg gehen.

Aus Entwicklersicht gibt es einige viele Vorteile:
- Es kann ein Visual Studio (Express) 2010 gearbeitet werden, oder SharpDevelop(open source).
- IDE-Nutzer können eine Api-Library nutzen.
- Vollständiges Intellisense.
- Nie mehr Laufzeitfehler durch "Syntaxfehler", welche vom LarneScript-Compiler nicht richtig behandelt wurden.
- Das volle Funktionssprektrum von C#, dazu zählen:
* Vererbung für eigene Klassen
* Funktionsüberladung
* Delegates
* Events
* Try-Cahtes
* und vieles mehr

Die API an sich wird nicht erweitert. Sie bleibt (fast) genau gleich. Technisch gesehen wird der vom Spieler hochgeladene Quelltext auf dem Server in Javascript konveriert und in einer Javascript-Engine auf dem Server ausgeführt. Die Konvertierung von C# in Javascript funktioniert sehr gut, die neue GUI von STNE z.B. wird auf dem selben Weg "generiert".

Die Änderung an der ScriptEngine ist allein auch deshalb schon notwendig, weil nur so wäre es möglich in Zukunft Extensions auch für die neue GUI anzubieten. Direkten Javascript-Zugrif wird es jedoch nicht geben. Dies hat technische Hintergrunde (die after-compilation-js-Funktionen(nicht sichtbar in c#) heißen z.B. STNE.app.Callme$String$Integer$Integer$Type etc., also sehr unleserlich), als auch aus Sicherheitsgründen(es wird z.B. kein document, htmlelement-api etc. geben.). Natürlich kann sich jeder per firefox-extension sich beliebige scripts einfügen, aber offizelle STNE-extension sollten gefahrlos von anderen spielern ausgeführt werden wollen, ohne dass gleich die session-cookies "entführt" werden.

Lieben Gruß,
Arakis

Sargraner
05-03-2012, 07:48
Das heißt im Klartext, alle Scripte geben von jetzt auf gleich ihren Geist auf und müssen neu geschrieben werden?

Die Syntaxunterschiede werden zwar nicht all zu groß sein, aber machen muss man es trotzdem erstmal.

Brokkoli
05-03-2012, 16:54
Das heißt im Klartext, alle Scripte geben von jetzt auf gleich ihren Geist auf und müssen neu geschrieben werden?

Das heisst es dann wohl - Ich denke aber mal langfristig ist es definitiv eine bessere Lösung, das auf C# umzustellen. Das Schreiben neuer Scripte wird dadurch ja deutlich einfacher... Und wohl auch die Wartung der Scriptengine.

Elchi
05-03-2012, 17:27
offizelle STNE-extension sollten gefahrlos von anderen spielern ausgeführt werden wollen, ohne dass gleich die session-cookies "entführt" werden.

Man könnte sich theorethisch über ein Callback versteckt JavaScript-Code holen, der dann in die Seite eingefügt wird (nur mal so nebenbei).
Du meinst wohl, dass man mit Addons nicht auf interne Inhalte zugreifen kann.

lg
Elchi

Arakis
05-03-2012, 18:13
Elchi, es wird keine Möglichkeit geben, per callback etc. sich Javascripte dynamisch einzufügen, weil die client-js-api in c#(für die "neue" gui) nur aus einem kleinem subset der offiziellen javascript-api sein wird. Es gibt also kein xmlhttprequest, document, htmlelement, setattribute etc, es werden nur vordefinierte, stark "restriktive" controls geben, wie derzeit von den server-extenstions her bekannt. Das es die funktionen im "echten" javascript (und der client code den compilierten 1:1 ausführt), spielt keine rolle, denn was in der c#-api nicht definiert ist, kann niemals erfolgreich kompiliert werden(auf c# ebene), geschwiege denn erfolgreich in js ungewandelt werden. Und ob man dann manuell eigene js-dateien per firefox extension anhängt ist ja jedem seine sache, dann darf er sich a) mit komischen funktionsnamen herumschlagen(welche sich übrigens häufig ändern könnten, da autogeneriert) b) kann er die scripte nicht "mal eben" anderen spielern unterschieben.

Mit den jetztigen Extensions hast du ja auch keine Möglichkeit, dem Spieler js unterzuschieben, jstoogle etc. sind stark restriktive, vordefinierte funktionen. Die Deviese der Script engine war schon von begin an: Nicht zu viele funktionen auf Kosten der Sicherheit. Denn schwarze Schafe wird es immer geben, Vertrauen darf man nicht setzen. Zwar kann man mit den jetztien Extension auch "mist" bauen, aber zumindest keine login-session entführen / unkontrollierten jscode auf dem client ausführen.

Lieben Gruß,
Arakis

Elchi
06-03-2012, 21:34
@arakis: gib mal ScriptContext.WriteApplog("<script>alert('Test');</script>"); in einer Extension ein.

lg
Elchi

ker
06-03-2012, 23:06
unnötig das in einer extension zu tun... das ist ein vollständiges script ;)
seltsam dass das noch keinem eingefallen ist seine grease-monkeys da einzubauen...
dann funzen die von jedem browser aus ^^

anyway zum topic...

ich finde den umstieg zu c# auch spitze. ich denke das wird das entwickeln stark vereinfachen (ide, klar definierte sprache).
die meisten scripts müssten doch auch automatisch konvertiert werden können... oder?

DarkMo
07-03-2012, 00:53
also generell find ichs auch scho toll. gerade wegen der ide. das im editor gerumsche is einfach ätzend. aber aus aktueller situation is das ganz schön abartig >< 2 scripte für die öffentlichkeit mit je über 2k loc fast fertig un dann sowas :roll:

SimonSlater
07-03-2012, 18:09
Prinzipiell gut.
Aber ich habe leider keine Zeit mich monatelang hinzusetzen und mein Allianz-Skript neu zu schreiben mit knapp 3000 Zeilen Code (inklusive dazugehöriger GUI-Extension).
Ist es nicht möglich, eine Übergangsphase zu machen oder sowas? Ist ja sonst unmöglich für die arbeitende Bevölkerung.

Elchi
07-03-2012, 18:34
da kann ich wirklich nur zustimmen. Man könnte auch einfach 2 Typen an Scripten einführen

lg
Elchi

ker
07-03-2012, 21:19
Wenn ich mich recht entsinne, dann sind nur Scripts die dem Allgemeinwohl dienen (RP oder benutzerfreundlichere Interfaces) "wichtig"…
Der Rest ist nur nice-to-have…

Artemide
07-06-2012, 17:18
Hallo,
was ist denn aus dieser Idee geworden ??

Den der stne.script editor funktioniert nicht mehr, gibt es schon die C# scripting Methode.
So das ich anstelle des externen script editor einen C# nehmen könnte, halt mit den Ganzen STNE Funkrionen/Klassen.

Und wenn das geht, wie binde ich die STNE Klassen ein ?

Apollo
07-06-2012, 17:30
Würde mich auch mal sehr interessieren...ich fand den externen Scripteditor sehr praktisch.
Da ich mich mit C# allerdings nicht wirklich auskenne, fände ich es klasse, wenn es irgend eine Anleitung gäbe, wie man einen anderen Scripteditor dafür verwenden kann....

Richard
04-02-2015, 01:41
der vom Spieler hochgeladene Quelltext auf dem Server in Javascript konveriert und in einer Javascript-Engine auf dem Server ausgeführt.

O.o
Mehr Zeichen: o.O o.o O.O

Richard
04-02-2015, 15:09
//Nachtrag: Und das hält tatsächlich jemand für eine gute oder gar performante Lösung?^^

darkside
05-02-2015, 00:28
falls du es noch nicht gemerkt hast, wird die scriptengine gerade neu gemacht.

Richard
05-02-2015, 21:48
falls du es noch nicht gemerkt hast, wird die scriptengine gerade neu gemacht.

Das macht das jetzt nicht besser.....