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 compilateur utilisé pour BO2 présente certaines limitations et défauts que vous rencontrerez probablement à un moment donné. La plupart d’entre eux sont documentés et sont faciles à contourner si vous suivez simplement la bonne façon de faire tout ce que vous faites. Alors, regardons quelques-uns.

(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é.