Einschränkungen des T6 GSC-Compilers#
Das alt Der für BO2 verwendete Compiler wies einige Einschränkungen und Fehler auf, weshalb wir dringend empfehlen, dass Sie zu GSC-Werkzeug stattdessen.
Die meisten dieser Fehler sind dokumentiert und lassen sich leicht umgehen, wenn Sie einfach dem richtigen Weg folgen, um das zu tun, was Sie tun, indem Sie unten lesen, aber um Kopfschmerzen oder zusätzliche Arbeit zu vermeiden, empfehlen wir dringend, den alten Compiler zu verwerfen und auf den neuen Compiler umzusteigen.
Diese Seite dient hier als Referenz, hauptsächlich um zu erklären, warum der Wechsel zum neuen Compiler dringend empfohlen wird.
Diese Probleme treten nicht mehr auf, wenn der in unserer Modding-Dokumentation empfohlene Compiler verwendet wird.
(Credits an JezuzLizard zur Dokumentation dieser)
Endlosschleifen#
- Sie können keine verschachtelten
foreach
da es eine Endlosschleife verursachen wird. - Sie können nicht verwenden
continue;
inforeach
oderfor
Schleifen, 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) < 1
ist nicht dasselbe wie0 - 1 < 1
. Der Compiler erkennt und kompiliert es als0 - (1 < 1)
.(0 - 1) < 1
wird zurückkehrentrue
(oder 1), weil 1 größer als -1 ist0 - 1 < 1
wird 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
if
Anweisung 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.