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

Advertencia

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