uesp-eso-build-wrapper
v0.7.0
Published
Node.js wrapper around the UESP ESO Build Editor math engine. Calculate Elder Scrolls Online character stats (Health, Magicka, Stamina, mitigation, crit, etc.) without rewriting any game formulas.
Maintainers
Readme
uesp-eso-build-wrapper
Read in English.
Um wrapper Node.js/TypeScript em torno do motor de cálculo do UESP ESO Build Editor.
Calcule as Computed Character Statistics de Elder Scrolls Online — Health, Magicka, Stamina, mitigação, chance de crítico, regeneração e mais de 200 — usando as fórmulas da própria UESP. Sem reimplementar nenhuma fórmula.
O que é?
Isto não é um cliente HTTP da UESP. A biblioteca executa o motor de cálculo da UESP localmente, dentro do seu processo Node.js, e expõe os resultados numa API tipada:
Aplicação
↓
uesp-eso-build-wrapper (API TypeScript)
↓
Camada de compatibilidade Node.js (globals de browser + DOM mínimo)
↓
UESP esoEditBuild.js (executado in-process via vm.runInThisContext)
↓
Funções de cálculo UESP → ComputedStatsVocê injeta os inputs, o próprio código da UESP calcula cada stat, você lê de volta um objeto tipado.
Por que esta biblioteca?
- Precisão de referência — o mesmo motor
esoEditBuild.jsdo esobuilds.uesp.net, mantido pela UESP e atualizado a cada patch. - Sem reimplementar fórmulas — o wrapper contém zero matemática de ESO. Quando um stat parece errado depois de um patch, a correção está sempre nos dados do jogo alimentados ao motor, nunca no código do wrapper. É isso que mantém a precisão entre patches.
- Local e síncrono —
calculateBuild()não faz nenhuma requisição de rede. O motor roda in-process; os dados do jogo e os itens são fornecidos pela sua aplicação (arquivo, banco de dados, dados gerados). - Aceita item data da UESP diretamente — equipamentos no formato
exportJson.php?table=minedItemplugam direto emBuildInput.items. - Nativo TypeScript — inputs/outputs tipados, API Reference documentada com TSDoc, além de funções de catálogo em runtime (
listAvailableBuffs,listRacialPassives, …) para descobrir nomes válidos.
Propriedades principais
- Executa o motor de cálculo UESP vendored localmente (
vendor/uesp-esochardata) - Sem rede para calcular builds — ver Precisa de internet?
- Não reimplementa as fórmulas de stats do ESO
- API síncrona; o motor inicializa uma vez por processo (singleton, chamadas seguintes são no-op)
- Zero dependências de runtime — Node.js puro
- 204 computed stats por build
Instalação
npm install uesp-eso-build-wrapperQuick Start
Os game data não vêm no pacote npm — você os fornece via initEsoEngineFromData (ver Primeiros Passos).
import fs from 'fs';
import { initEsoEngineFromData, calculateBuild } from 'uesp-eso-build-wrapper';
import type { UespInitData } from 'uesp-eso-build-wrapper';
const initData = JSON.parse(
fs.readFileSync('uesp-game-data.json', 'utf-8'),
) as UespInitData;
initEsoEngineFromData({ initData }); // uma vez por processo
const stats = calculateBuild({
character: {
race: 'High Elf',
class: 'Sorcerer',
level: 50,
attributes: { health: 0, magicka: 64, stamina: 0 },
},
});
console.log(stats.Health); // 16000
console.log(stats.Magicka); // 19104
console.log(stats.SpellDamage); // 1000Como funciona
initEsoEngineFromData({ initData })prepara globals de browser, semeia o motor com seus game data e executa os scripts vendored da UESP viavm.runInThisContext— uma vez por processo.calculateBuild(input)escreve sua build no estado do motor, roda o próprioUpdateEsoComputedStatsList_Real()do motor e lê os resultados deg_EsoComputedStatsnum objeto tipadoComputedStats.
Detalhes: Arquitetura · Primeiros Passos · Lendo o Resultado.
Documentação
Documentação completa em Português (BR) e English em srtomy.github.io/uesp-eso-build-wrapper:
| Seção | Descrição |
| --- | --- |
| Introdução | O que é, por que existe, propriedades principais |
| Arquitetura | Motor local, política de rede, fluxo de dados |
| Primeiros Passos | Instalação, game data, primeiro cálculo |
| Guias | Personagem, itens, Champion Points, buffs, skills |
| Lendo o Resultado | Os 204 computed stats, debugBuild() |
| API Reference | Gerada a partir do TSDoc (em inglês) |
| Solução de Problemas | Problemas comuns (Next.js/serverless, stats errados...) |
| Contribuindo | Setup dev, testes, atualização após patch do ESO |
Limitações
- O comportamento segue a versão vendored do motor UESP — suportar um patch novo do ESO significa atualizar os scripts vendored + game data e rodar os testes.
- O motor foi escrito para browsers em torno de estado global; o wrapper adapta isso para Node.js (init singleton, chamadas síncronas). Sem garantias de concorrência além das que o próprio motor oferece — ver Solução de Problemas.
- Requer Node.js >= 24. Bundlers/serverless precisam incluir
vendor/**explicitamente (documentado em Solução de Problemas).
Licença
MIT © srtomy
Este pacote inclui arquivos de uesp/uesp-esochardata (MIT).
Ver THIRD_PARTY_NOTICES para detalhes.
Elder Scrolls Online é marca registrada de ZeniMax Media Inc. Este projeto não é afiliado nem endossado pela ZeniMax Media Inc.
