Macros de código: la API

Qué puede leer una macro de código, qué funciones tiene y todas las acciones que puede pedir, con sus argumentos.

Una macro de código es un trozo de JavaScript que no toca el mundo: lee datos de la mesa y devuelve una lista de acciones, las mismas que usan los pasos del modo fácil y las zonas de evento. Quien las ejecuta es el motor de siempre, con tus permisos, igual que si las hubieras pulsado a mano. Esta página es la referencia de lo que el código puede leer y de las acciones que puede pedir; sale del propio motor. Cómo se crea una macro está en Creador de macros y cómo se usa en la mesa en Macros en la mesa.

Cómo se ejecuta

El código corre en un entorno aislado, sin acceso al navegador, a la red, a temporizadores ni a datos de otras personas. Tirar dados se hace con el motor de la casa: cuando el script pide una tirada, la mesa la resuelve y el script se vuelve a ejecutar desde el principio con ese resultado, así que dentro no hay reloj ni azar propios. Por eso hay topes:

  • Como mucho 24 tiradas distintas por macro (cada una cuesta una pasada).
  • Como mucho 60 acciones devueltas; el resto se descarta y el registro lo dice.
  • Un tope de tiempo por pasada; si se supera, la macro se detiene y avisa.
  • Lo que no esté en el catálogo de acciones se descarta y se nombra en el aviso.

Funciones

Las que siempre existen dentro del código:

FunciónQué hace
dados('2d6+3')Tira esa expresión con el motor de la casa y devuelve { total, detalle, formula }. No publica nada en el chat; para eso, la acción tirar.
azar()Un número de 0 a 1 del mismo origen (Math.random es lo mismo).
hacer(tipo, argumentos)Pide una acción por su nombre. Cada acción del catálogo tiene además su atajo con ese mismo nombre: mensaje({ texto: 'Hola' }).
ficha.get('atributos.dex')Lee un valor de la ficha por ruta, sin tildes ni mayúsculas. Si no existe devuelve undefined y lo anota en el registro; nunca inventa un valor.
ficha.tiene(ruta)Dice si la ficha tiene ese dato.
inventario()El inventario de la ficha: { id, nombre, cantidad, peso, peso_total, equipado, categoria }.
cuantos('Poción')Cuántas unidades lleva de un objeto, por nombre.
dinero() · dinero('oro')Todo el dinero, o el de una moneda.
console.log(...)Escribe en el registro de la macro (hasta 100 líneas).

Datos que puede leer

Variables de solo lectura; cambiarlas no cambia nada fuera de la macro.

VariableQué trae
yoQuien lanza la macro.
tokenSu token en el mapa.
tokensLos tokens de la escena.
objetivoEl objetivo marcado.
fichaLa ficha de quien lanza.
campanaDatos de la campaña.
escenaLa escena en curso.
combateEl combate, si lo hay.
murosLos muros y puertas.
lucesLas luces.
zonasLas zonas de evento.
jugadoresQuién está en la mesa.

Acciones que puede pedir

Cada fila es un nombre que se usa como función (dano({ formula: '2d6' })) o con hacer('dano', ...). La tercera columna da los nombres de sus argumentos. Las que no aparecen aquí se escriben solo a mano en una macro de texto.

La mesa

NombreQué haceArgumentos
mensajedecir algo en el chattexto
tirartirar dadosformula, etiqueta, detalle
fxlanzar un efecto visualefecto, escala, permanente
pausarpausar la partida (aviso a la mesa)texto
texto_flotantetexto flotante sobre el mapatexto
sonarsonar un efectourl
musicacambiar la lista de músicalista
experiencialanzar una experiencia a la mesabiblioteca, url, titulo
momentolanzar un momento de la escenamomento
presentar_apppresentar un puzzle (y esperar)app_id
mostrar_entradaenseñar una entrada del Mundo a la mesaentrada
revelar_contenedorrevelar un contenedor (botín) a la mesacontenedor
mostrar_escenamostrar una escena (imagen o vídeo)url, titulo, bucle, modo
reproducir_pistareproducir una pista de músicalista, pista
poner_escenaponer una escena en vivoescena
cartasmover cartas de una barajabaraja, accion, cantidad
carta_jugarjugar una carta de mi manobaraja, carta
carta_descartardescartar cartas de mi manobaraja, carta, cantidad
carta_zonallevar una carta de mi mano a una zonabaraja, carta, zona
carta_girargirar o enderezar cartas de la mesabaraja, carta, modo
carta_mostrarenseñar una carta de mi mano a la mesabaraja, carta
carta_dardar una carta a otro jugadorbaraja, carta
tirada_cartashacer una tirada de cartasbaraja, cantidad, de, agregacion, despues, etiqueta
carta_recetahacer una receta de la barajabaraja, receta

El mapa

NombreQué haceArgumentos
abrir_puertaabrir una puertamuro
cerrar_puertacerrar una puertamuro
cerrar_con_llavecerrar una puerta con llavemuro
animacionencender o apagar una animación del mapaprop, accion
cambiar_plantacambiar de plantaplanta
oscuridadcambiar la oscuridad de la escenanivel
climacambiar el clima de la escenaclima, intensidad
pantallaefecto de pantalla (destello, temblor, fundido, viñeta…)efecto, fuerza, segundos, color
luzencender o apagar una luzluz, intensidad
ocultar_tokenocultar un token—
mostrar_tokenmostrar un token—
mover_tokenmover un token a una casillax, y
cambiar_fondocambiar el fondo del mapaurl
cambiar_mapallevar a la mesa a otro mapamapa
mover_camaratraer la vista de todos a un puntodonde, x, y
crear_tokencrear un tokennombre, clase, x, y, cantidad, pv, ca, tamano
borrar_tokenquitar un token del mapa—
actualizar_tokencambiar datos de un tokennombre, pv, pv_max, ca, tamano, visible, rotacion
crear_murocrear un muro o una puertax1, y1, x2, y2, puerta
actualizar_murocambiar un muro o una puertamuro, puerta, color, grosor
borrar_muroquitar un muro o una puertamuro
crear_luzcrear una luzx, y, radio, intensidad, color
actualizar_luzcambiar una luzluz, radio, intensidad, color
borrar_luzquitar una luzluz
nieblarevelar u ocultar nieblamodo, x, y, radio, ancho, alto
capa_visiblemostrar u ocultar una capa en mi vistacapa, visible
centrar_tokencentrar mi vista en una criaturatoken_id

Combate y ficha

NombreQué haceArgumentos
usar_accionusar una acción tuyaaccion
danohacer dañoformula, tipo_dano, efecto
curarcurarformula, efecto
condicionaplicar una condicióncondicion
quitar_condicionquitar una condicióncondicion
empezar_combateempezar el combategrupo, modo
pedir_tiradapedir una tiradatexto, salvacion, cd, formula, tipo_dano
ficha_ponerponer un valor en la fichacampo, valor
ficha_sumarsumar (o restar) a un valor de la fichacampo, valor
inventario_dardar un objetonombre, cantidad, peso, limite_peso
inventario_quitarquitar un objetonombre, cantidad
dinero_sumarsumar (o restar) dinerocantidad, moneda
esperar_turnoesperar un turno (y seguir)hasta, ronda
siguiente_turnopasar al siguiente turnosentido
anadir_a_combatemeter en el combate—
quitar_de_combatesacar del combate—

Control del guion

NombreQué haceArgumentos
armar_zonaarmar otra zonazona
desarmar_zonadesarmar otra zonazona
revelar_zonarevelar una zona a la mesazona
disparar_zonadisparar otra zonazona
ejecutar_macroejecutar una macromacro
sisi se cumple… (y si no…)cond, entonces, sino
repetirrepetir varias vecesveces, acciones
esperaresperar un ratosegundos
esperar_eventoesperar a que pase algoevento, si, segundos, si_no_llega
var_ponerguardar una variablenombre, alcance, modo, valor
preguntarpreguntar a alguienpregunta, forma, opciones, campos, elegir_min, elegir_max, min, max, clave, destino, segundos, si_no_responde

Un ejemplo

Tirar un ataque y, si impacta, hacer daño:

var ataque = dados('1d20+5');
mensaje({ texto: 'Ataque: ' + ataque.total });
if (ataque.total >= 15) {
  dano({ formula: '1d8+3', tipo_dano: 'cortante' });
}

Problemas frecuentes

«Esta macro pide más de 24 tiradas.» Reparte las tiradas en varias macros o usa una sola expresión de dados (4d6kh3).

«La ficha no tiene…» La ruta no existe en tu sistema; mira el registro de la macro y los nombres reales de los campos.

«Una acción se descarta.» Su nombre no está en el catálogo; el aviso la nombra.

Véase también

Creador de macros, Macros en la mesa, Zonas de evento: que el mapa haga cosas solo, Comandos del chat y dados, Fórmulas y funciones.

Todas las guías de Roliando