Esta página ha sido traducida automáticamente, por lo que puede contener algunas inexactitudes. Puedes ayudar aportando una traducción, o bien puedes cambiar a la versión en inglés.

Limitaciones del compilador T6 GSC#

El compilador utilizado para BO2 tiene algunas limitaciones y defectos con los que probablemente se encontrará en algún momento. La mayoría de estos están documentados y son fáciles de solucionar si simplemente sigue la forma correcta de hacer lo que sea que esté haciendo. Entonces, veamos algunos.

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