Esta página ha sido traducida automáticamente, puede contener algunas imprecisiones. Puedes ayudar contribuyendo con una traducción, o puedes cambiar a la versión en inglés.

Limitaciones del compilador T6 GSC#

El old compiler used for BO2 had some limitations and flaws which is why we highly recommend that you switch to GSC Tool instead.
Most of these flaws are documented and are easy to work around if you just follow the correct way to do whatever you are doing by reading below, but to avoid any headache or extra work, again, we highly recommend ditching the old compiler and switching to the new compiler.

Advertencia

This page is here for reference, mostly to explain why switching to the new compiler is highly recommended.
These issues are no longer present when using the compiler recommended in our modding documentation.

(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; en foreach o for 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 que 0 - 1 < 1. El compilador lo reconocerá y compilará como 0 - (1 < 1).
  • (0 - 1) < 1 volverá true (o 1) porque 1 es mayor que -1
  • 0 - 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 un if 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.