Tabla de valores por nivel en columnas (precio, daño, capacidad) con generadores matemáticos.
progressionTable#
Una tabla con una fila por nivel y columnas personalizables: precio, daño, capacidad, intervalo de producción — cualquier valor que escale con la progresión. Cada columna tiene un generador matemático o acepta valores manuales celda a celda.
Por qué importa#
Toda mecánica que crece con el nivel — costo de mejora, daño de torre, intervalo de producción, capacidad de inventario, costo de rango de habilidad — es una curva. En lugar de inventar 4 fórmulas separadas, modelas todo en la misma tabla y referencias columnas desde otros addons. Cambiar un solo parámetro reescala la columna entera.
Dónde suele vivir#
- Página de tipo
📊 Tabla de Balance. Ese es el camino principal. - Página de
👤 Personajes(viene junto con profile + xpBalance).
Singleton — 1 tabla por página. Pero puedes tener varias páginas si necesitas separar (ej.: tabla de enemigos vs. tabla de torres).
Esquema#
| Campo | Tipo | Padrão | Descrição |
|---|---|---|---|
idSí | string | ID interno. | |
nameSí | string | Nombre amigable. | |
startLevelSí | number | Primer nivel de la tabla (generalmente 1). | |
endLevelSí | number | Último nivel (ej.: 100). | |
columnsSí | ProgressionTableColumn[] | Definición de cada columna (id, nombre, generador, formato). | |
rowsSí | ProgressionTableRow[] | Filas calculadas. Raramente las editas directamente — provienen de los generadores. | |
overrides | Record<string, Record<string, number>> | Sobrescrituras manuales por (nivel, columnId). Útil para romper la fórmula en niveles específicos sin perder toda la columna. |
ProgressionTableColumn#
| Campo | Tipo | Padrão | Descrição |
|---|---|---|---|
idSí | string | ID interno de la columna. | |
nameSí | string | Nombre amigable (ej.: Costo, Daño, Tiempo de Crafting). | |
libraryRef | { libraryAddonId, entryId } | Cuando quieres vincular el nombre+clave de la columna a una entrada de la Field Library (taxonomía central). | |
generator | ProgressionColumnGenerator | Generador matemático que llena los valores. Cuando está ausente, modo manual. | |
decimals | number | Decimales al formatear. | |
isPercentage | boolean | Cuando es true, los valores se formatean con % (ej.: 0.15 → 15%). | |
min | number | Piso aplicado a cada celda. | |
max | number | Techo aplicado a cada celda. |
Modos de generador#
type ProgressionColumnGenerator =
| { mode: "manual" }
| { mode: "linear"; base: number; step: number; bias?: number }
| { mode: "exponential"; base: number; growth: number; bias?: number }
| { mode: "formula"; baseColumnId: string; baseManualValue?: number; expression: string };
- manual: escribes celda a celda.
- linear:
base + (nivel − 1) × step + (bias || 0). - exponential:
base × growth^(nivel − 1) + (bias || 0). - formula: expresión tipo JS que puede referenciar otra columna de esta misma tabla. Permite columnas derivadas (ej.: "venta = compra × 0.5").
ProgressionTableRow#
{ level: number, values: Record<string, number | string> }
Cada fila tiene level + un diccionario de columnId → valor. Generalmente se genera — no editar manualmente excepto mediante overrides.
Ejemplo#
Tabla de mejora de la Torre Arquera, 1–50, con 3 columnas:
{
"id": "prog-archer-tower",
"name": "Torre Arquera",
"startLevel": 1,
"endLevel": 50,
"columns": [
{
"id": "col-cost",
"name": "Costo",
"generator": { "mode": "exponential", "base": 100, "growth": 1.5 },
"decimals": 0
},
{
"id": "col-damage",
"name": "Daño",
"generator": { "mode": "linear", "base": 10, "step": 5 },
"decimals": 0
},
{
"id": "col-fire-rate",
"name": "Disparos por segundo",
"generator": { "mode": "linear", "base": 1, "step": 0.05 },
"decimals": 2,
"max": 5
}
],
"rows": []
}
Después de generar (botón "Recalcular" en el panel), rows tendrá 50 entradas con los valores calculados.
overrides#
Para romper la fórmula en niveles específicos sin perder la columna generada:
"overrides": {
"10": { "col-cost": 1500 }, // nivel 10 cuesta 1500 (no lo que daría la fórmula)
"25": { "col-damage": 200 } // pico de balance en el nivel 25
}
La fila 10 tiene col-cost = 1500, y el resto sigue siendo generado. Útil para picos de diseño.
Wizard#
El tipo de página 📊 Tabla de Balance crea la tabla con valores predeterminados (3 columnas de ejemplo, niveles 1–100). Puedes personalizar en el panel.
Quién apunta a esta tabla#
production.intervalSecondsProgressionLinky otros campos*ProgressionLink— las recetas escalan temporizadores/cantidades con la tabla.craftTable.unlock(indirectamente, vía xpAddonRef) — los desbloqueos por nivel usan curvas, y las curvas frecuentemente alimentan tablas.