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