<!-- BEGIN CHANGE: como publicar patches do Custom OTC / APK (sem GitHub Actions) -->

# files-otc - arvore de patch OTCv8 (White Antidote)

Pasta espelhada no servidor e servida em:

`https://ot.whiteantidote.com/files-otc/`

A API `portal/api/updater.php` varre esta arvore, calcula **CRC32** (`crc32b`, igual ao client) e responde o manifesto JSON do updater nativo OTCv8.

## Estrutura esperada

```
files-otc/
  init.lua
  data/          # sprites/dat/things, etc.
  modules/
  layouts/
  mods/          # opcional
  otclient_dx.exe   # Windows DirectX (platform WIN32-WGL)
  otclient_gl.exe   # Windows OpenGL  (platform WIN32-EGL)
  libEGL.dll        # se o GL precisar
  libGLESv2.dll
```

Nao coloque `data.zip` aqui. O client baixa **arquivos soltos**; ele mesmo reconstroi o archive local.

## Pre-requisito no client (workspace OTC)

Em `init.lua` (Custom + otclient-meu):

```lua
Services = {
  updater = "https://ot.whiteantidote.com/api/updater.php",
  ...
}
```

O updater **so roda** se o client foi aberto a partir de `data.zip` (`g_resources.isLoadedFromArchive()`). Pasta `data/` solta (dev) nao dispara update.

## Publicacao manual (release)

1. Gere o release local (exe + `data.zip`) a partir de `P:\OT\OTC\otclient-meu` / `WhiteAntidoteCustomOTC`.
2. Extraia o conteudo do `data.zip` (ou copie a arvore fonte equivalente) para esta pasta:
   - `init.lua`, `data/`, `modules/`, `layouts/`, `mods/`
3. Se o binario mudou, copie tambem `otclient_dx.exe` / `otclient_gl.exe` (e DLLs se necessario).
4. Sincronize esta pasta para o host:
   - Prod assets: `/home/ubuntu/portal/assets/files-otc/`
   - Repo local pode espelhar em `html/files-otc/` antes do rsync/FTP.
5. Se mudou o instalador full (1a instalacao), atualize tambem:
   - `Downloads/WhiteAntidoteCustom.exe`
6. APK: mudancas so em Lua/data = patch via updater; mudanca de engine = republicar `Downloads/whiteantidote-android.apk`.
7. (Opcional) Incremente `APP_VERSION` no `init.lua` republicado.
8. Teste: client antigo com `data.zip` deve baixar so arquivos com CRC diferente.
9. Cache da API dura ~45s. Apos publicar, aguarde ou apague `portal/cache/updater_otc_checksums.json`.

## Apache (uma vez)

Alias necessario (ja documentado nos confs de deploy):

```
Alias /files-otc /home/ubuntu/portal/assets/files-otc
```

Mesmo `<Directory /home/ubuntu/portal/assets>` usado por `/Downloads`.

## O que NAO fazer

- Nao usar GitHub Actions / repo de release para o player.
- Nao apontar `Services.updater` para `otclient.ovh` em producao.
- Nao esperar que o client ElfbotNG use esta API (Fase 2 = `files-classic` + launcher).

## Checklist rapido

- [ ] Arvore espelhada em `files-otc/`
- [ ] Binarios DX/GL se o exe mudou
- [ ] `GET/POST https://ot.whiteantidote.com/api/updater.php` retorna `url` + `files`
- [ ] `https://ot.whiteantidote.com/files-otc/init.lua` baixa o arquivo
- [ ] Client archive-mode baixa so o diff

<!-- END CHANGE -->
