Cette page a été traduite par machine, elle peut contenir quelques inexactitudes. Tu peux aider en contribuant à une traduction, ou tu peux aussi passer à la version anglaise.

Limitations du compilateur T6 GSC#

Le vieux compilateur utilisé pour BO2 avait quelques limitations et défauts, c’est pourquoi nous vous recommandons vivement de passer à Outil GSC au lieu de.
La plupart de ces défauts sont documentés et sont faciles à contourner si vous suivez simplement la bonne façon de faire ce que vous faites en lisant ci-dessous, mais pour éviter tout mal de tête ou travail supplémentaire, encore une fois, nous vous recommandons vivement d’abandonner l’ancien compilateur et de passer au nouveau compilateur.

Avertissement

Cette page est ici pour référence, principalement pour expliquer pourquoi il est fortement recommandé de passer au nouveau compilateur.
Ces problèmes ne sont plus présents lors de l’utilisation du compilateur recommandé dans notre documentation de modding.

(Crédits à JezuzLizard pour les documenter)

Boucles infinies#

  • Vous ne pouvez pas utiliser d’imbriqué foreach car cela provoquera une boucle infinie.
  • Vous ne pouvez pas utiliser continue; dans foreach ou for boucles car cela provoquera une boucle infinie.

Opérateurs#

Vous devez toujours utiliser des parenthèses lorsque vous comparez des valeurs qui utilisent des conditions et lorsque vous utilisez des opérateurs. P.E.M.D.A.S et les mathématiques de base auront toujours de l’importance lors de la GSC. Si vous ne vous en souvenez pas, votre script peut se gâter en fonction de ce que vous faites.

  • (0 - 1) < 1 n’est pas la même chose que 0 - 1 < 1. Le compilateur le reconnaîtra et le compilera comme 0 - (1 < 1).
  • (0 - 1) < 1 reviendra true (ou 1) parce que 1 est supérieur à -1
  • 0 - 1 < 1 reviendra false (ou 0) car il va comparer les valeurs puis soustraire.

Si vous ne comprenez toujours pas, utilisez simplement une parenthèse lorsque des opérateurs sont impliqués.

Ternary Operators compile mais ne fonctionne pas comme prévu.
Au lieu de renvoyer l’une des deux valeurs spécifiées, le compilateur le compilera pour renvoyer des bools à la place.

Si les relevés#

  • Vous ne pouvez pas utiliser plus de 2 conditions dans un if instruction connectée par OR (||) entre parenthèses.

    Exemple:

    if ((a || b || c) && d)
    

    Cela ne se compilera pas. Cependant, vous pouvez réécrire ceci comme l’un des deux :

    if ((a || b) && d || c && d)
    if (a && d || b && d || c && d)
    
  • Vous ne pouvez pas utiliser OU (||) dans un if et entre parenthèses si la chaîne de conditions ne se trouve pas sur le côté le plus à gauche de l’instruction if et le nombre de conditions sur le côté le plus à droite n’est pas au moins 2.

    Exemple:

    if (a && (b || c))
    

    Cela ne se compilera pas. Toutefois

    if ((b || c) && a)
    

    compilera dans le cas de:

    if ((a || b) && (c || d))
    

Variables#

  • Vous ne pouvez pas utiliser de notifications/waittills définis par variable avec des entrées/sorties supplémentaires.

    Exemple:

    var = "connected";
    level notify(var, player);
    level waittill(var, player);
    

    Cela va compiler. Cependant, la notification/l’arrêt d’attente ne fonctionnera pas. C’est la seule façon de le faire :

    level notify("connected", player);
    level waittill("connected", player);
    

Animtree#

Malheureusement, pour certains scripts faisant :
#using_animtree( "animtree" );
est nécessaire au fonctionnement du script. Les scripts qui le contiennent se bloqueront au démarrage / pendant l’exécution. Il existe une solution de contournement utilisant des noms de script tels que maps/mp/gametypes_zm/_globalentities.gsc et nommer un script extrait mais non décompilé.