# Dark Memory — Arquivo do Artesão

Catálogo local, banco SQLite e simulador de crafting sincronizados com o código compilado do Unity em **08/10/2026**. A interface usa JavaScript sem dependências e a API usa Python padrão. O esquema do banco é 3; os projetos exportados pela bancada continuam no formato 2.

## Abrir

Na raiz do workspace:

```powershell
python dark-memory-db/server.py --port 8796
```

Abra <http://127.0.0.1:8796>. O servidor aceita conexões apenas desta máquina. O banco não contém contas, inventários reais ou credenciais e não modifica o Nakama.

## Conteúdo atual

- 426 registros, dos quais 416 pertencem à versão atual. IDs antigos permanecem consultáveis para compatibilidade; Livro e Foice ficam fora dos filtros atuais.
- 31 afixos e 157 faixas, incluindo os sete tiers do prefixo de movimento das botas.
- 17 Únicos com poder na versão atual, 60 peças de conjunto, 11 relicários e 3 pedras de técnica.
- 13 Moedas da Memória, 28 Óbolos, Pedra da Reforja e 6 runas.
- Perfis de afixos por base e raridade, requisitos FOR/DES/INT/VON, dados dos frascos, conjuntos e poderes únicos.
- Ícones exportados do projeto e versões ampliadas quando existe um original correspondente.

Novidades em relação à exportação anterior: `amulet_twelve`, `gloves_weigher`, `helm_ember_crown`, `staff_shaman`, `relic_oath_seal` e pedras orbitais de espada, machado e lança. Os nomes e descrições completos estão no catálogo; a interface remove sufixos antigos de raridade sem alterar os IDs.

## Regras que mudaram

**Selo Antigo:** trava permanentemente um afixo aleatório de um Mágico ou Raro. O afixo, o tier e o valor são preservados nas moedas seguintes, inclusive na corrupção. A Pedra da Reforja continua exigindo uma escolha e recusa o afixo travado.

**Movimento nas botas:** prefixo exclusivo, com valor fixo em cada tier. A probabilidade é o peso dividido pela soma dos pesos liberados para o nível do item.

| Tier | Valor | Nível mínimo | Peso |
|---|---:|---:|---:|
| T1 | 35% | 44 | 3 |
| T2 | 30% | 37 | 4 |
| T3 | 25% | 30 | 4 |
| T4 | 20% | 25 | 8 |
| T5 | 15% | 18 | 8 |
| T6 | 10% | 8 | 28 |
| T7 | 5% | 1 | 45 |

Os outros afixos de equipamento usam T1–T5, com níveis mínimos 44/30/18/8/1 e pesos 3/8/16/28/45. Frascos e relicários têm tabelas próprias. Consulte `affix_tiers.min_item_level`, e não apenas a tabela geral `tier_gates`.

**Perfis:** compatibilidade e peso dos afixos dependem da base e da raridade. Conjuntos favorecem seu tema; o primeiro afixo novo procura o grupo preferido. Despertar e corrupção também respeitam os perfis. Armas de conjurador não recebem velocidade de ataque no sorteio atual.

**Requisitos:** a bancada calcula os atributos realmente exigidos pela família de arma ou defesa, grau e regras de híbridos. Dano, defesa e bloqueio são derivados do balanceamento exportado, incluindo as fórmulas atuais.

**Runas e cintos:** cintos não ganham novos engastes e recusam inserção de runas. Runas antigas já presentes são preservadas. Armas recebem o bônus ofensivo; armaduras e escudos recebem o defensivo. O jogo permite extração pelo ferreiro; o simulador não executa essa operação no jogo.

**Frascos:** mostram recuperação percentual, duração e cargas, além de quatro modificadores locais com três tiers. No drop, recebem 0/1/2/3 modificadores conforme Normal/Mágico/Raro/Único. Esses efeitos não são afixos passivos do personagem e não aceitam moedas de equipamento.

**Relicários:** têm afixos próprios (Normal 0, Mágico 1, Raro/Único 2; no máximo um por lado), T3 no nível 1, T2 no 12 e T1 no 28. Cintos Normais liberam um gancho, Mágicos/Raros dois e Únicos três. Dados e efeitos das 11 bases vêm da biblioteca compilada.

## Uso e limites

Preparar uma base cria um cenário de nível e raridade. Planejar afixos edita um objetivo; simular uma moeda sorteia um resultado e registra apenas um gasto virtual. A bancada calcula os atributos do item, não DPS ou atributos finais do personagem.

Normal não tem afixos; Mágico suporta um prefixo e um sufixo; Raro suporta até três por lado. Únicos autorados e peças de conjunto têm três afixos no drop e restrições próprias de crafting. Peças de conjunto conservam seus IDs `set_*_legendary` por compatibilidade; a apresentação atual é Conjunto.

As probabilidades usam pesos e intervalos inclusivos. Média de tentativas = `1/P`; tentativas para ao menos 95% = `ceil(log(0,05)/log(1-P))`, com uma tentativa quando P = 1. Médias não garantem um resultado. O gerador aleatório da Unity não é reproduzido: a validação compara decisões, legalidade dos resultados e distribuições.

Projetos ficam no `localStorage` do navegador. Na primeira leitura com esta atualização, o conteúdo anterior é preservado sob uma chave com sufixo `:before-20261008` antes de ser validado. Importações no formato 2 validam raridade, afixos, tiers, engastes e estados, inclusive itens corrompidos com afixo travado. O formato 1 de raridades antigas continua recusado com explicação. Saves do jogo não são usados nem alterados.

## Dados e API

`data/catalog.json` e `catalog.js` contêm regras, registros, perfis, requisitos e hashes das fontes. `data/catalog.sqlite` é a versão relacional; `data/schema.sql` descreve o esquema.

| Tabela | Conteúdo |
|---|---|
| items | IDs, disponibilidade `in_release`, classificação e documento completo |
| item_profiles | Perfil de cada base por raridade |
| affixes / affix_tiers | Lado, atributo, intervalos, pesos e nível mínimo por tier |
| item_affixes | Afixos compatíveis com a base exportada |
| rarities / tier_gates / grades | Escada, tiers gerais e graus |
| currencies / runes | Ações, aliases e efeitos dos materiais |
| proposals / metadata | Propostas separadas, proveniência e conferências |

Rotas somente leitura:

- `GET /api/health`
- `GET /api/items?q=blade&kind=Weapon&page=1&limit=20` — somente versão atual, até 100 por página.
- `GET /api/items?include_retired=1` — inclui registros antigos.
- `GET /api/items/blade_ashguard` — consulta direta por ID, inclusive antigo.
- `GET /api/modifiers` — inclui nível mínimo por tier.

## Atualizar e validar

Execute na raiz. A exportação usa o lock compartilhado do Unity; nunca abra um segundo editor. Para várias reviews, agrupe-as com `tools/unity_chain.py`.

```powershell
python tools/unity_batch.py --owner crafter-db --method DarkARPG.Editor.CrafterDatabaseExport.Run --log doc/crafter-db/unity-export.log --wait 7200 --timeout 1500 --args=-force-d3d11
python tools/build_crafter_db.py
python tools/build_crafter_presentation.py
npm --prefix dark-memory-db run check
npm --prefix dark-memory-db test
python dark-memory-db/tests/api_test.py
python tools/sync_site_codex.py
npm --prefix dark-memory-site run check
python tools/check_site_db_sync.py
```

Só gere o banco após uma exportação Unity bem-sucedida. O exportador altera apenas arquivos do catálogo e fixtures; não altera cenas nem saves. A sincronização do site atualiza a edição atual, mantendo as edições arquivadas.

A conferência de 08/10 usa 9.936 variantes, 168.400 decisões (3.368 estados × 50 materiais), 9.624 criações reais, 155 recusas, 28.872 criações do motor, 18 histogramas, 100 níveis e 1.100 médias de dano. O simulador também verifica 561 snapshots e importações. Relatórios em `doc/crafter-db/`; backup, logs Unity e revisão visual em `doc/site-db-20261008/`.

