# Gandora Client — Auditoria e Otimizacao

## Diagnostico tecnico

- Engine: OTClientV8.
- Build identificada no log do proprio cliente: `Gandora 3.1 rev 121 (dev)`.
- Build do engine: 7 de fevereiro de 2022, arquitetura x86.
- Renderer observado no log: ANGLE / OpenGL ES 3.0 sobre Direct3D11.
- Configuracao de protocolo atual: `772` em `init.lua` e nos logs de protocolo.
- Portanto, este pacote nao e um client de protocolo 760 puro: ele e um OTClientV8 configurado para protocolo 772, mantendo estetica/recursos classicos. O protocolo 772 foi preservado deliberadamente.

## Problemas encontrados

### 1. Erro OTML real na interface de inventario
Arquivos:
- `data/styles/40-inventory.otui`
- `layouts/retro/styles/40-inventory.otui`
- `layouts/retro/styles/40-inventoryy.otui`

Causa:
- indentacao com TAB, rejeitada pelo parser OTML.

Sintoma confirmado no log:
`OTML error ... line 312: indentation with tabs are not allowed`

Correcao:
- normalizacao da indentacao para espacos.

Impacto:
- elimina falha de importacao do estilo do inventario.

### 2. Modulos duplicados
Havia duas copias do modulo `game_playerbars`, com o mesmo nome e arquivos identicos:
- `modules/game_console/game_playerbars/`
- `modules/game_playerbars/`

A copia duplicada foi removida do pacote otimizado. A funcionalidade permanece na copia ativa.

### 3. Backup invalido dentro de `modules`
Existia:
- `modules/game_outfit/bkp karma/outfit.otmod`

Esse arquivo nao era um OTMod valido; seu conteudo era binario/corrompido. Tambem havia Lua/OTUI de backup no mesmo diretorio.

O diretorio de backup foi removido do pacote distribuivel. O modulo funcional `modules/game_outfit/` permanece intacto.

### 4. Timer desnecessario da Battle List
Arquivo:
`modules/game_battle/battle.lua`

Problema:
- a Battle List iniciava um ciclo de 100 ms durante o carregamento do modulo, inclusive fora de jogo;
- o ciclo continuava mesmo com a janela fechada.

Correcao:
- atualizar somente online;
- iniciar ao entrar no jogo;
- parar ao sair;
- parar quando a janela estiver fechada;
- reiniciar ao abrir a Battle List.

Impacto:
- reduz processamento ocioso e elimina um loop permanente desnecessario.

### 5. Timer da Experience Analyzer
Arquivo:
`modules/game_exph/exph.lua`

Problema:
- o modulo iniciava um agendamento de 5 segundos mesmo fora de jogo;
- o agendamento era recriado continuamente.

Correcao:
- timer somente durante uma sessao online;
- cancelamento no logout/destruicao;
- reinicio no login;
- correcao do indice circular do historico de experiencia para 1..60.

Impacto:
- elimina atividade periodica desnecessaria fora de jogo e deixa o ciclo de vida correto.

### 6. Timer do mapa para criatura marcada
Arquivo:
`modules/game_interface/widgets/uigamemap.lua`

Problema:
- ciclo de 100 ms podia permanecer ativo enquanto o cliente estava offline.

Correcao:
- nao inicia offline;
- encerra quando fica offline;
- inicia sob demanda quando o mapa recebe movimento do mouse durante uma sessao online.

Impacto:
- reduz CPU em login/tela de personagem e durante logout.

## Problemas registrados no log que NAO foram mascarados

### Protocolo
O log registra:
`ProtocolGame parse message exception ... proto: 772`
e mensagens com:
`unknown message mode 255`

Isso indica que o servidor esta enviando pelo menos uma mensagem cujo modo nao esta sendo aceito pelo parser atual do client. Isso nao deve ser "corrigido" inventando uma interpretacao no client sem comparar com o protocolo real do servidor.

### Shop
O log antigo registra um erro de `setSize` em `modules/game_shop/shop.lua`.

A versao presente no ZIP atual nao possui mais a chamada `setSize` naquele fluxo, indicando que esse trecho provavelmente ja foi alterado entre a execucao registrada no log e o pacote atual. Nao foi aplicada uma correcao especulativa.

### Asset de mount
O log registra ausencia de:
`/images/game/combatmodes/mount.png`

O uso encontrado esta em estilos mobile/backup, enquanto o layout retro ativo nao depende desse asset. Nao foi criado um icone falso nem alterado o protocolo para esconder o problema.

### Escrita de arquivo
O log registra:
`unable to open file for writing ''`

Nao ha, no Lua distribuido atual, uma chamada evidente que escreva literalmente em uma string vazia. Esse ponto precisa de reproducao com o cliente executando para determinar qual caminho C++/config esta vazio. Nao foi aplicado um workaround especulativo.

## Sistemas novos que dependem do servidor

Nao foram inventados ou conectados nesta etapa:
- Events
- Ranking
- consultas externas
- novos packets
- novos opcodes

Esses sistemas exigem contrato real com servidor/AAC/Extended Opcode. Implementa-los sem esse contrato contrariaria a regra de compatibilidade.

## Estado final desta etapa

Prioridades atendidas:
1. estabilidade — melhorias de ciclo de vida e limpeza;
2. compatibilidade — protocolo 772 preservado;
3. desempenho — timers ociosos reduzidos;
4. organizacao — duplicidades/backup invalido removidos;
5. usabilidade — erro de importacao do inventario corrigido.

A etapa visual e a criacao dos paineis de Events/Ranking devem ser feita somente depois de definir a interface de dados do servidor, para nao criar uma UI bonita que dependa de funcoes inexistentes.
