Diese Seite wurde maschinell übersetzt, sie kann einige Ungenauigkeiten enthalten. Du kannst helfen, indem du eine Übersetzung beisteuerst, alternativ kannst du zur englischen Version.

Einschränkungen des T6 GSC-Compilers#

Das alt Der für BO2 verwendete Compiler wies einige Einschränkungen und Mängel auf, weshalb wir Ihnen dringend empfehlen, 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.

Warnung

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; in foreach oder for 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 wie 0 - 1 < 1. Der Compiler erkennt und kompiliert es als 0 - (1 < 1).
  • (0 - 1) < 1 wird zurückkehren true (oder 1), weil 1 größer als -1 ist
  • 0 - 1 < 1 wird zurückkehren false (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 einem if -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.