Skip to content

DSL Variables

DarkBladeDev edited this page Feb 22, 2026 · 2 revisions

DSL — Variables

CEE soporta variables por evento, con scope local o global.

  • Locales: existen dentro del runtime (se re-inicializan en cada ejecución).
  • Globales: existen a nivel motor y se comparten entre eventos (solo si están declaradas como scope: global).

Declaración

Forma simple (inferencia de tipo)

event:
  variables:
    phase: "INIT"
    kills: 0
    enabled: true
  • string si es String
  • number si es Number
  • boolean si es Boolean
  • array si es List
  • object si es Map

En esta forma, el scope por defecto es local.

Forma completa

event:
  variables:
    kills:
      type: number
      scope: local
      initial: 0
      description: "Kills dentro del runtime"

    total_kills:
      type: number
      scope: global
      initial: 0
      description: "Contador global"

Campos:

  • type: string | number | boolean | array | object
  • scope: local | global
  • initial (o value): valor inicial
  • description: texto libre

Valores iniciales: referencias y expresiones

CEE resuelve valores iniciales en múltiples pasadas para soportar dependencias.

Referencia a otra variable

variables:
  a:
    type: number
    scope: local
    initial: 10
  b:
    type: number
    scope: local
    initial: "${a}"

Si la referencia aún no está resuelta, se reintenta en la siguiente pasada.

Expresión MVEL

variables:
  base:
    type: number
    initial: 5
  double:
    type: number
    initial: "= base * 2"

La expresión debe devolver el tipo correcto según type, o el motor falla la inicialización.

Uso en runtime

Lectura

  • En texto: {var} y ${var}
    • {var} reemplaza ocurrencias dentro del string.
    • ${var} como valor completo (si el string es exactamente ${var}) devuelve el valor sin convertirlo a texto.

Ejemplo:

- action: broadcast
  message: "Kills: {kills}"

Escritura

set_variable escribe con context.setVariable(key, value).

Importante:

  • Para escribir en una variable global, el evento debe declarar esa variable con scope: global en su propia sección event.variables.
  • Si no está declarada como global por ese evento, la escritura no afecta a globales.

Esto evita que un evento “ensucie” el estado global por accidente.

Clone this wiki locally