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;
dansforeach
oufor
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 que0 - 1 < 1
. Le compilateur le reconnaîtra et le compilera comme0 - (1 < 1)
.(0 - 1) < 1
reviendratrue
(ou 1) parce que 1 est supérieur à -10 - 1 < 1
reviendrafalse
(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 unif
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é.