Limitaciones del compilador T6 GSC#
El viejo el compilador utilizado para BO2 tenía algunas limitaciones y fallas, por lo que le recomendamos encarecidamente que cambie a Herramienta GSC en lugar de.
La mayoría de estos fallos están documentados y son fáciles de solucionar si sigues la forma correcta de hacer lo que estés haciendo leyendo a continuación, pero para evitar cualquier dolor de cabeza o trabajo extra, de nuevo, te recomendamos encarecidamente que te deshagas del antiguo compilador y cambies al nuevo.
Esta página está aquí como referencia, principalmente para explicar por qué se recomienda encarecidamente cambiar al nuevo compilador.
Estos problemas ya no están presentes cuando se usa el compilador recomendado en nuestra documentación de modding.
(Créditos a JezuzLizard para documentarlos)
Bucles infinitos#
- No se puede utilizar ningún anidado
foreach
ya que provocará un bucle infinito. - No se puede utilizar
continue;
enforeach
ofor
bucles ya que causará un bucle infinito.
Operadores#
Siempre debe usar paréntesis al comparar valores que usan condiciones y al usar operadores. P.E.M.D.A.S y las matemáticas básicas seguirán siendo importantes al hacer GSC. Si no recuerdas eso, tu guión puede estropearse dependiendo de lo que estés haciendo.
(0 - 1) < 1
no es lo mismo que0 - 1 < 1
. El compilador lo reconocerá y compilará como0 - (1 < 1)
.(0 - 1) < 1
volverátrue
(o 1) porque 1 es mayor que -10 - 1 < 1
volveráfalse
(o 0) porque comparará los valores y luego restará.
Si aún no entiende, simplemente use paréntesis cuando los operadores estén involucrados.
Ternary Operators compila pero no funciona como se esperaba.
En lugar de devolver uno de los dos valores especificados, el compilador lo compilará para devolver bools en su lugar.
Si declaraciones#
-
No se pueden utilizar más de 2 condiciones en un
if
instrucción conectada por OR (||
) operadores entre paréntesis.Ejemplo:
if ((a || b || c) && d)
Esto no se compilará. Sin embargo, puede reescribir esto como cualquiera de los dos:
if ((a || b) && d || c && d) if (a && d || b && d || c && d)
-
No puede utilizar OR (
||
) operadores en unif
y entre paréntesis si la cadena de condiciones no estaría en el lado izquierdo de la instrucción if y el número de condiciones en el lado más derecho no es al menos 2.Ejemplo:
if (a && (b || c))
Esto no se compilará. Sin embargo
if ((b || c) && a)
compilará en el caso de:
if ((a || b) && (c || d))
Variables#
-
No puede utilizar notificaciones/waittills definidas por variables con entradas/salidas adicionales.
Ejemplo:
var = "connected"; level notify(var, player); level waittill(var, player);
Esto compilará. Sin embargo, la notificación/espera no funcionará. Esta es la única manera de hacer esto:
level notify("connected", player); level waittill("connected", player);
Animtree#
Desafortunadamente, para ciertos scripts que hacen:
#using_animtree( "animtree" );
es necesario para que el script funcione. Los scripts que lo contienen se bloquearán al iniciar / mientras se ejecuta. Hay una solución alternativa que utiliza nombres de script como maps/mp/gametypes_zm/_globalentities.gsc
y nombrar un script extraído pero no descompilado.