Saltar al contenido principal

Code frameworks

Tablas del reglamento

Guarda datos fijos de las reglas en una tabla y léela desde tus reglas, o úsala como las opciones de una entrada.

Qué es una tabla

Una tabla del reglamento son datos fijos que leen tus reglas, como un bonificador para cada Calling. No es estado de la partida, y los jugadores nunca la cambian. Cambiar una fila crea una versión nueva de tu juego, como cualquier otra edición del código.

Declarar una tabla

Una tabla es un archivo JSON en tables/. Enuméralo en el manifiesto.

manifest/project.json
  "tables": ["tables/callings.json"]
  1. Línea 10 Las rutas de los archivos de tabla.
tables/callings.json
{
  "id": "callings",
  "name": "Callings",
  "columns": [
    { "key": "calling", "label": "Calling", "type": "string" },
    { "key": "bonus", "label": "Watch bonus", "type": "number" }
  ],
  "rows": [
    { "calling": "Guard", "bonus": 30 },
    { "calling": "Scout", "bonus": 10 }
  ]
}
  1. Líneas 4-7 Las columnas. Cada una tiene una key, una label y un type: string, number o boolean.
  2. Líneas 8-11 Las filas. Cada fila da un valor para cada columna, y nada más.

Un Framework enumera los ids de las tablas que lee.

schemas/keeper.json
  "tables": ["callings"]
  1. Línea 22 El Framework puede leer la tabla callings.
LímiteValor
Columnas por tabla64
Filas por tabla1000
Tablas por Framework64
Tablas por Game128

Leer una tabla en una regla

table.find recibe el id de la tabla, las columnas que debe comparar con los valores que buscar, y las columnas que devolver con un valor por defecto para cada una. Devuelve las columnas que nombras, de la primera fila cuyas columnas de comparación sean todas iguales a tus valores. Si ninguna fila coincide, devuelve tus valores por defecto.

rules/keeper.ts
export function construct(
  name: string,
  max_hp: number,
  calling: string,
): { name: string; max_hp: number; hp: number; calling: string; watch: number } {
  const row = table.find("callings", { calling: calling }, { bonus: 0 });
  const bonus: number = row.bonus;
  return {
    name: name,
    max_hp: max_hp,
    hp: max_hp,
    calling: calling,
    watch: 20 + bonus,
  };
}
  1. Línea 6 Busca el bonificador del Calling. El valor por defecto es 0.
  2. Línea 7 Lee una columna del resultado. Su tipo viene de la tabla, así que no necesita conversión.
  3. Línea 13 Usa el bonificador en un valor inicial.

El id de la tabla es una cadena escrita en el código, y el Framework debe enumerar la tabla. Cada columna que nombras debe existir, y solo vuelven las columnas que nombras. Un constructor lee una tabla de esta manera. Los valores que se comparan deben ser una variable, un campo o un literal, no un valor calculado.

Estos errores se detectan cuando compruebas el proyecto:

  const row = table.find("callings", { calling: calling }, { boost: 0 });
has no column 'boost'
which manifest.tables does not declare
  const row = table.find("callings", { calling: calling + "!" }, { bonus: 0 });
table.find match values must be a variable, a field or a literal

Usar una tabla para las opciones

Una entrada de texto puede tomar sus opciones de una columna de una tabla. Las opciones son los valores distintos de la columna, en el orden de las filas.

schemas/keeper.json
    "calling": {
      "label": "Calling",
      "optionsFrom": { "table": "callings", "column": "calling" },
      "defaultValue": "Guard"
    }
  1. Línea 11 El asistente ofrece los valores de la columna calling.
  2. Línea 12 El valor por defecto debe ser una de las opciones.
is not one of this Framework's tables

Una entrada de acción de tipo texto puede hacer lo mismo con una entrada optionsFrom en la declaración de la acción. Una fuente debe ofrecer al menos 2 opciones.

Siguiente