Tabela de valores por nível em colunas (preço, dano, capacidade) com geradores matemáticos.

progressionTable#

Tabela com uma linha por nível e colunas customizáveis: preço, dano, capacidade, intervalo de produção — qualquer valor que escala com o avanço. Cada coluna tem um gerador matemático ou aceita valores manuais célula a célula.

Por que importa#

Toda mecânica que cresce com o nível — preço de upgrade, dano de torre, intervalo de produção, capacidade de inventário, custo de skill rank — é uma curva. Em vez de inventar 4 fórmulas separadas, você modela tudo na mesma tabela e referencia colunas de outros addons. Mudar um único parâmetro reescala a coluna inteira.

Onde costuma viver#

  • Página de tipo 📊 Tabela de Balanceamento. Esse é o caminho principal.
  • Página de 👤 Personagens (vem ao lado de profile + xpBalance).

Singleton — 1 tabela por página. Mas você pode ter várias páginas se precisar separar (ex.: tabela de inimigos vs tabela de torres).

Schema#

CampoTipoPadrãoDescrição
idSimstringID interno.
nameSimstringNome amigável.
startLevelSimnumberPrimeiro nível da tabela (geralmente 1).
endLevelSimnumberÚltimo nível (ex.: 100).
columnsSimProgressionTableColumn[]Definição de cada coluna (id, nome, gerador, formatação).
rowsSimProgressionTableRow[]Linhas calculadas. Você raramente edita direto — vem dos geradores.
overridesRecord<string, Record<string, number>>Sobrescritas manuais por (level, columnId). Útil pra quebrar a fórmula em níveis específicos sem perder a coluna inteira.

ProgressionTableColumn#

CampoTipoPadrãoDescrição
idSimstringID interno da coluna.
nameSimstringNome amigável (ex.: Custo, Dano, Tempo de Craft).
libraryRef{ libraryAddonId, entryId }Quando você quer linkar nome+key da coluna a uma entry da Field Library (taxonomia central).
generatorProgressionColumnGeneratorGerador matemático que preenche os valores. Quando ausente, modo manual.
decimalsnumberCasas decimais ao formatar.
isPercentagebooleanQuando true, valores formatados com % (ex.: 0.15 → 15%).
minnumberPiso aplicado a cada célula.
maxnumberTeto aplicado a cada célula.

Modos de gerador#

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: você digita célula por célula.
  • linear: base + (level − 1) × step + (bias || 0).
  • exponential: base × growth^(level − 1) + (bias || 0).
  • formula: expressão JS-like que pode referenciar outra coluna desta mesma tabela. Permite colunas derivadas (ex.: "venda = compra × 0.5").

ProgressionTableRow#

{ level: number, values: Record<string, number | string> }

Cada linha tem level + um dict de columnId → valor. Geralmente é gerada — não edite manualmente exceto via overrides.

Exemplo#

Tabela de upgrade da Torre de Arqueiros, 1-50, com 3 colunas:

{
  "id": "prog-archer-tower",
  "name": "Torre de Arqueiros",
  "startLevel": 1,
  "endLevel": 50,
  "columns": [
    {
      "id": "col-cost",
      "name": "Custo",
      "generator": { "mode": "exponential", "base": 100, "growth": 1.5 },
      "decimals": 0
    },
    {
      "id": "col-damage",
      "name": "Dano",
      "generator": { "mode": "linear", "base": 10, "step": 5 },
      "decimals": 0
    },
    {
      "id": "col-fire-rate",
      "name": "Tiros por segundo",
      "generator": { "mode": "linear", "base": 1, "step": 0.05 },
      "decimals": 2,
      "max": 5
    }
  ],
  "rows": []
}

Após gerar (botão "Recalcular" no painel), rows vai ter 50 entries com os valores calculados.

overrides#

Pra quebrar a fórmula em níveis específicos sem perder a coluna gerada:

"overrides": {
  "10": { "col-cost": 1500 },   // nível 10 custa 1500 (não o que a fórmula daria)
  "25": { "col-damage": 200 }   // pico de balanceamento no 25
}

A linha 10 tem col-cost = 1500, e o resto continua gerado. Útil pra spikes de design.

Wizard#

A page type 📊 Tabela de Balanceamento cria a tabela com defaults (3 colunas exemplo, levels 1-100). Você customiza no painel.

Quem aponta pra esta tabela#

  • production.intervalSecondsProgressionLink e outras *ProgressionLink — receitas escalam timers/quantidades com a tabela.
  • craftTable.unlock (indiretamente, via xpAddonRef) — desbloqueio por nível usa curva, e curvas frequentemente alimentam tabelas.

Veja também#