# Manual: Custom OTC - installer e atualizacoes (White Antidote)

<!-- BEGIN CHANGE: manual release Custom OTC / updater / APK -->

## Resposta rapida

**Sim** - voce pode gerar o installer a partir de `P:\OT\OTC\WhiteAntidoteCustomOTC\` com o projeto InstallAware `P:\OT\OTC\installer-whiteantidotecustomotc20.iit`.

Ha **dois** fluxos distintos:

| Objetivo | O que fazer |
|----------|-------------|
| **1a instalacao / reinstall** | Build do installer - publica `Downloads/WhiteAntidoteCustom.exe` |
| **Atualizacao de quem ja tem o client** | Patch via updater - espelha arvore em `files-otc` no host (quase nunca precisa de installer novo) |

APK: 1a vez = baixar APK; updates de Lua/data = mesmo updater; troca de engine = republicar APK.

---

## Pastas (mapa mental)

| Papel | Path |
|-------|------|
| Fonte de trabalho (Lua/modulos) | `P:\OT\OTC\otclient-meu\` (preferencial para publish) |
| Pasta de **release / installer** | `P:\OT\OTC\WhiteAntidoteCustomOTC\` |
| Script de empacote | `P:\OT\OTC\tools\publish-otc-release.ps1` |
| Projeto InstallAware | `P:\OT\OTC\installer-whiteantidotecustomotc20.iit` |
| Espelho local do patch | `P:\OT\OTSERVER\pedro\html\files-otc\` (gitignored, so espelho) |
| Patch em producao | `/home/ubuntu/portal/assets/files-otc/` |
| Installer / APK publicos | `html/Downloads/` - URL `https://ot.whiteantidote.com/Downloads/` |
| API updater | `https://ot.whiteantidote.com/api/updater.php` |

`WA_HTML_ROOT` = `/home/ubuntu/portal/assets` - updater le `files-otc` daqui.

---

## Regra de ouro do updater

O updater **so roda** se:

1. `Services.updater` aponta para a API WA em `init.lua`
2. O client foi aberto com **`data.zip`** (archive mode), **nao** com pasta `data/` solta ao lado do exe

Dev com pasta `data/` = sem patch automatico (esperado).

`keepFiles: false` no manifesto: a arvore em `files-otc` no host deve estar **completa** (modulos/layouts/mods/init + data sem things/1098 se quiser). Arvore so com 6 arquivos = risco de apagar o client do player.

`data/things` em geral **nao** entra no manifesto (client mantem o pack local), salvo `args.version`.

---

## A) Gerar o installer (1a instalacao)

### 1. Preparar a pasta de release

```powershell
cd P:\OT\OTC\tools
.\publish-otc-release.ps1
```

Isso:

- Gera `otclient-meu\data.zip` (init + data + modules + layouts + mods)
- Copia `data.zip` + `init.lua` para `WhiteAntidoteCustomOTC\`

Confirme na pasta de release:

- `otclient_dx.exe` / `otclient_gl.exe` (+ DLLs se GL)
- `data.zip` (obrigatorio para updater apos install)
- `init.lua` com `APP_VERSION` desejado e `Services.updater` da WA

**Nao** deixe so pasta `data/` sem `data.zip` no pacote do installer se quiser patch automatico.

### 2. Build InstallAware

1. Abra `P:\OT\OTC\installer-whiteantidotecustomotc20.iit` no InstallAware
2. Confirme que o source do build aponta para `WhiteAntidoteCustomOTC` (ou a saida configurada no .iit)
3. Build - gera o instalador (ex.: `WhiteAntidoteCustom.exe`)

### 3. Publicar o instalador full

Copiar para:

- Local: `P:\OT\OTSERVER\pedro\html\Downloads\WhiteAntidoteCustom.exe`
- Host: `/home/ubuntu/portal/assets/Downloads/WhiteAntidoteCustom.exe` (e espelho `www/html/Downloads` se existir)

Pagina: `https://ot.whiteantidote.com/download`

So precisa republicar o **.exe** quando mudar binario, DLLs, estrutura do install, ou quiser base limpa para novos players. Patch diario = **nao** exige installer novo.

---

## B) Fazer uma atualizacao (patch) - fluxo normal

Use isto para Lua, mods, layouts, options, healthbars, etc.

### 1. Editar fonte

Edite em `otclient-meu` (e mantenha Custom alinhado via publish).

Bump `APP_VERSION` em `init.lua` quando quiser sinalizar release (ex.: 1342 - 1343).

### 2. Empacotar + espelhar local

```powershell
cd P:\OT\OTC\tools
.\publish-otc-release.ps1 -MirrorFilesOtc
# Se o exe mudou:
.\publish-otc-release.ps1 -MirrorFilesOtc -CopyBinaries
```

### 3. Sync completo para o host

**Nunca** suba so 2-3 arquivos se o updater estiver com `keepFiles: false`.

Exemplo seguro (exclui things/1098 pesado):

1. Tar/rsync de `html/files-otc` - `data/things/1098`
2. Destino: `/home/ubuntu/portal/assets/files-otc/`
3. Apague cache: `/home/ubuntu/portal/cache/updater_otc_checksums.json`

### 4. Testar

1. Client instalado antigo (com `data.zip`)
2. Abrir - deve baixar diff e reiniciar
3. Conferir mudanca (ex.: healthbars) e `APP_VERSION`

Smoke API:

```text
POST https://ot.whiteantidote.com/api/updater.php
Body: {"version":1341,"build":"","os":"windows","platform":"WIN32-WGL","args":{}}
```

Esperado: `url`, centenas de `files`, `/init.lua`, `/mods/...` presentes. Nao pode ser so 5-6 arquivos.

---

## C) APK

| Mudanca | Acao |
|---------|------|
| So Lua/mods/data (sem engine) | Mesmo patch `files-otc` - APK com updater aplica |
| Engine / NDK / permissao | Rebuild APK + `Downloads/whiteantidote-android.apk` |
| Nome / icone do app | Rebuild Ant do Package (nao basta trocar data.zip) |

### Branding (nome + icone)

Fonte: `otclient-meu/android/otclientv8/res/`
- `values/strings.xml` -> `app_name` = `White Antidote`
- `mipmap-*/ic_launcher.png` -> pocoa WA (`portal/public/logo.png`)

Espelhar em `ARM64/Release/Package/res/`, depois:

```text
ant clean debug
(em Package/, com ANDROID_HOME = AndroidSDK 25 + Ant do VS 2019)
```

Conferir: `aapt dump badging whiteantidote-android.apk` -> `application-label:'White Antidote'`.

Depois embutir `data.zip` lean (so `things/860`, sem 1098), publicar em Downloads no host.

Script auxiliar: `otclient-meu\create_android_assets.ps1` (data.zip para android assets). Preferir excluir `things/1098` no zip do APK.

**Branding (nome + icone):** o build padrao OTC usa `app_name=OTClientV8` e icone de varinha. Antes de publicar, ajustar:

- `res/values/strings.xml` -> `White Antidote`
- `res/mipmap-*/ic_launcher.png` -> arte do site (`portal/public/apple-touch-icon.png` ou potion brand)
- Rebuild (`apktool b`) + assinar v2/v3 (`uber-apk-signer`)

No repo `html`, a fonte do icone e `portal/public/apple-touch-icon.png` (potion HEALING em fundo escuro).

No aparelho: desinstalar o APK antigo (label OTClientV8) antes de instalar o novo, para o launcher atualizar nome/icone.

---

## Checklist de release

### Patch (mais comum)

- [ ] Edicao em `otclient-meu`
- [ ] `APP_VERSION` bump se fizer sentido
- [ ] `publish-otc-release.ps1 -MirrorFilesOtc` (+ `-CopyBinaries` se exe mudou)
- [ ] Sync **completo** - host `portal/assets/files-otc`
- [ ] Limpar cache updater
- [ ] Testar Custom archive-mode
- [ ] (Opcional) APK full se quiser base nova na loja/Downloads

### Installer novo (menos comum)

- [ ] `publish-otc-release.ps1` (data.zip na pasta Custom)
- [ ] Build InstallAware `.iit`
- [ ] Subir `WhiteAntidoteCustom.exe` em Downloads
- [ ] Mesmo dia: sync `files-otc` alinhado a essa base

### Nunca

- [ ] Subir arvore parcial com `keepFiles: false`
- [ ] Apontar updater para `otclient.ovh` em prod
- [ ] Esperar patch com pasta `data/` solta (dev)
- [ ] Trocar things 860 por 1098 no Custom sem plano de assets

---

## Troubleshooting

| Sintoma | Causa comum |
|---------|-------------|
| Nao atualiza | Rodando com `data/` solta; ou `Services.updater` vazio |
| Client "sumiu" / quebrou apos update | `files-otc` parcial no host |
| Manifesto com poucos arquivos | Sync incompleto |
| Cache velho | Esperar ~45s ou apagar `updater_otc_checksums.json` |
| APK enorme | Incluiu `things/1098` no data.zip |
| APK nao instala (Android 11+) | APK sem assinatura v2/v3 - re-assinar com `uber-apk-signer` antes de publicar |
| APK nao instala (update) | Certificado diferente da versao antiga - desinstalar app antigo primeiro |
| APK nao instala (device 32-bit) | Binario so tem `lib/arm64-v8a` - precisa rebuild com `armeabi-v7a` |

---

## Docs relacionadas

- Contexto longo: `docs/client-updater-context.md`
- Pasta patch: `files-otc/README.md`
- Skill do agente: `.cursor/skills/otc-custom-release/SKILL.md`

<!-- END CHANGE -->
