Einschränkungen des T6 GSC-Compilers#
Das old compiler used for BO2 had some limitations and flaws which is why we highly recommend that you switch to GSC Tool instead.
Most of these flaws are documented and are easy to work around if you just follow the correct way to do whatever you are doing by reading below, but to avoid any headache or extra work, again, we highly recommend ditching the old compiler and switching to the new compiler.
This page is here for reference, mostly to explain why switching to the new compiler is highly recommended.
These issues are no longer present when using the compiler recommended in our modding documentation.
(Credits an JezuzLizard zur Dokumentation dieser)
Endlosschleifen#
- Sie können keine verschachtelten
foreachda es eine Endlosschleife verursachen wird. - Sie können nicht verwenden
continue;inforeachoderforSchleifen, da dies eine Endlosschleife verursacht.
Betriebspersonal#
Sie sollten beim Vergleichen von Werten, die Bedingungen verwenden, und beim Verwenden von Operatoren immer Klammern verwenden. P.E.M.D.A.S und grundlegende Mathematik wird immer noch wichtig sein, wenn man GSC macht. Wenn Sie sich nicht daran erinnern, kann Ihr Skript durcheinander geraten, je nachdem, was Sie tun.
(0 - 1) < 1ist nicht dasselbe wie0 - 1 < 1. Der Compiler erkennt und kompiliert es als0 - (1 < 1).(0 - 1) < 1wird zurückkehrentrue(oder 1), weil 1 größer als -1 ist0 - 1 < 1wird zurückkehrenfalse(oder 0), weil es die Werte vergleicht und dann subtrahiert.
Wenn Sie es immer noch nicht verstehen, verwenden Sie einfach Klammern, wenn Operatoren beteiligt sind.
Ternary Operators kompiliert, funktioniert aber nicht wie erwartet.
Anstatt einen der beiden angegebenen Werte zurückzugeben, kompiliert der Compiler ihn, um stattdessen Bools zurückzugeben.
If-Anweisungen#
-
Sie können nicht mehr als 2 Bedingungen in einem
ifAnweisung verbunden durch OR (||) in Klammern eingeschlossene Operatoren.Beispiel:
if ((a || b || c) && d)Dies wird nicht kompiliert. Sie können dies jedoch als eine der beiden umschreiben:
if ((a || b) && d || c && d) if (a && d || b && d || c && d) -
Sie können OR (
||) Operatoren in einemif-Anweisung und in Klammern, wenn sich die Zeichenfolge der Bedingungen nicht auf der linken Seite der if-Anweisung befindet und die Anzahl der Bedingungen auf der rechten Seite nicht mindestens 2 beträgt.Beispiel:
if (a && (b || c))Dies wird nicht kompiliert. Aber
if ((b || c) && a)wird kompiliert in den Fällen:
if ((a || b) && (c || d))
Variablen#
-
Sie können keine variablen Benachrichtigungen/Waittills mit zusätzlichen Ein-/Ausgängen verwenden.
Beispiel:
var = "connected"; level notify(var, player); level waittill(var, player);Dies wird kompiliert. Das Notify/Waittill funktioniert jedoch nicht. Dies ist der einzige Weg, dies zu tun:
level notify("connected", player); level waittill("connected", player);
Animtree#
Leider für bestimmte Skripte, die Folgendes tun:
#using_animtree( "animtree" );
ist erforderlich, damit das Skript funktioniert. Skripte, die es enthalten, stürzen beim Start / während der Ausführung ab. Es gibt eine Problemumgehung mit Skriptnamen wie maps/mp/gametypes_zm/_globalentities.gsc und benennen Sie ein extrahiertes, aber nicht dekompiliertes Skript.