Einschränkungen des T6 GSC-Compilers#
Das Alt Der für BO2 verwendete Compiler hatte einige Einschränkungen und Schwächen, weshalb wir dir dringend empfehlen, auf den Umstieg zu wechseln GSC-Werkzeug stattdessen.
Die meisten dieser Schwächen sind dokumentiert und leicht zu umgehen, wenn man einfach die richtige Methode folgt, indem man unten liest, 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 als Referenz, hauptsächlich um zu erklären, warum der Wechsel zum neuen Compiler sehr empfohlen wird.
Diese Probleme treten bei der Verwendung des in unserer Modding-Dokumentation empfohlenen Compilers nicht mehr auf.
(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.