Novedades
Los últimos cambios en el servidor, generados del changelog del proyecto.
El changelog está escrito en portugués, así que las entradas de abajo se muestran en portugués.
Sin entradas.
- Añadido
Chat traduzido sem confusão
Chat traduzido sem confusão: com o tradutor ligado (`@lang`), o ouvinte que escuta um idioma diferente do dele recebe a frase original e a tradução juntas, uma logo depois da outra, em vez da original na hora e a tradução depois (`ChatDelivery`, `HeldQueue`). Cada ouvinte tem uma fila em ordem de chegada, então nenhuma outra fala se mete entre a original e a tradução. Limite de espera de 1,5 s (`TRANSLATE_HOLD_MS`, sussurro incluído); ao estourar, sai só o original, a tradução tardia é descartada e o jogador recebe um aviso na língua dele (no máximo 1 a cada 30 s). Disjuntor (`ChatBreaker`): 5 frases lentas ou falhas em 30 s desligam a espera por 30 s (tudo sai na hora, com aviso). Mapas com vários idiomas: cada idioma tem o próprio future, então quem fala pt-BR é liberado sem esperar o es (que passa pelo inglês). Quem fala o mesmo idioma, está com o tradutor desligado ou recebe uma frase que o filtro descarta recebe na hora. A fila interna do tradutor passou de 3 s para 1,3 s (`TRANSLATE_QUEUE_MAX_WAIT_MS`). `!translatestats` mostra frases retidas, estouros, vezes que o disjuntor abriu e o atraso extra (p50 e p95). Se a entrega falhar por qualquer motivo, a frase vai a todos sem tradução. Testes: `ChatDeliveryTest` (11, ordem, limite, independência entre idiomas, disjuntor).
- Añadido
Launcher 1.4.0 (repositório externo, 409a319)
Launcher 1.4.0 (repositório externo, `409a319`): ao apertar Jogar reconfere o cliente e o pacote de idioma; arquivo alterado depois de verificado é restaurado e relatado à API (`POST /api/launcher/report`, vai ao Discord com conta e IP); se a conferência não terminar, o jogo não abre. Os `.wz` e a DLL ficam travados contra escrita enquanto o jogo roda (`PlayGuard`). Só barra edição casual e deixa a tentativa visível: contra um atacante decidido a defesa é validar no servidor. Testado: edição de 4 bytes no `Morph.wz` foi restaurada e relatada, e escrever, renomear e apagar foram recusados com o jogo aberto. Manifesto v6 e zip do site.
- Añadido
Launcher 1.3.0 (repositório externo, aef1066)
Launcher 1.3.0 (repositório externo, `aef1066`): mostra velocidade em Mb/s e tempo restante durante o download, e atualiza a tela no máximo a cada 250 ms. Publicado pelo manifesto v5 (os launchers 1.2.0 se atualizam sozinhos) e no zip do site. Testado: download do `Map.wz` e instalação completa do cliente numa pasta nova.
- Añadido
@dispose (atalho @ea), para qualquer jogador
`@dispose` (atalho `@ea`), para qualquer jogador: libera o cliente que ficou esperando resposta do servidor e encerra conversa de NPC presa. Não desfaz cena com a interface travada nem debuff.
- Corregido
Quest 32113 (Schoolgirls' Note, Ellinel Fairy Academy)
Quest 32113 (Schoolgirls' Note, Ellinel Fairy Academy): a nota (2431769) dropava a 1% do Raging Tome (a 2431768 do Grumpy Tome também); V90 sobe as duas para 75% (hipótese, igual aos outros itens da dungeon). A quest não tem item em `Check.img`, então o item não fica preso à quest e dropa para todos.
- Corregido
Itens de quest do Dual Blade sem nenhum drop no banco (2359, 2378, 2527, 2753, 2757, 2775, 2788, 2789)
Itens de quest do Dual Blade sem nenhum drop no banco (2359, 2378, 2527, 2753, 2757, 2775, 2788, 2789): migration V89 adiciona 8 linhas em `mob_drops` (7500/10000, taxa hipótese) para o único mob que o texto de cada quest cita. Levantamento: 616 pares quest/item sem drop no banco (428 com um só mob citado); ficaram de fora 2073, 9382 e 32294 (duvidosos) e os 188 ambíguos. Só dropa para quem tem a quest em andamento (`Drop.java`).
- Corregido
Quest 32108 ([Ellinel Fairy Academy], Dual Blade/Theme Dungeon)
Quest 32108 ([Ellinel Fairy Academy], Dual Blade/Theme Dungeon): o Cootie's Report Page (4033827) só dropava do mob 3501002 e a quest pede os Mystic Wisp (3501009) em Above the Lake 3. Migration V88 adiciona o drop (7500/10000, a taxa da linha existente).
- Corregido
Quests 32152 a 32155 (introdução do Theme Dungeon Ellinel Fairy Academy para Phantom/Cygnus/Dual Blade/Mercedes etc
Quests 32152 a 32155 (introdução do Theme Dungeon Ellinel Fairy Academy para Phantom/Cygnus/Dual Blade/Mercedes etc.; a 32153 é a Lady Syl, Dual Blade) sem script de início nem de fim (`q3215Xs`/`q3215Xe`): achado pelo `MissingScripts`. Reconstruídos a partir do `q32151s`/`q32151e` (mesmo fluxo e falas, outros NPCs); sem fonte do original, falas podem diferir por classe. `61144` (Maple Reward Points UI) e `64997` (Roro, evento) continuam sem script e só geram aviso.
- Corregido
Quest 2621 (Investigating the Jazz Bar, Dual Blade) travada
Quest 2621 (Investigating the Jazz Bar, Dual Blade) travada: o portal `secret00` do mapa 103000003 (script `go_secretTH`) e o NPC do diário (script `item2620`, o nome que o `Npc.wz` declara) não tinham script, e o item 4033183 não tinha origem. Reconstrução a partir dos dados do jogo, rotulada nos cabeçalhos e em `docs/known-issues.md`; **o script original não foi encontrado**.
- Corregido
Falas de script com nome de jogo traduzido
Falas de script com nome de jogo traduzido: `restore_game_names.py script` corrigiu 182 linhas em português e 161 em espanhol nos catálogos `strings-script-*.tsv`.
- Corregido
Quest 2620 (The Hut in the Swamp, Dual Blade) impossível de continuar
Quest 2620 (The Hut in the Swamp, Dual Blade) impossível de continuar: o portal de entrada da cabana (`103030100_in00`) era o bloqueio fixo do Swordie, a saída (`910350210_out00`) e o NPC da lixeira (1052108, que guarda o Secret Document 4033182) não tinham script (o `Npc.wz` o liga ao nome `trash_q2878`, de outra quest, e o servidor procura o script por esse nome: o primeiro `1052108.py` nunca era chamado e a lixeira mostrava "Not coded"), e o item não tinha nenhuma origem. Os três scripts entram como reconstrução a partir dos dados do jogo (quest em andamento abre a cabana, a lixeira dá o documento uma vez, a saída volta ao portal de entrada); **o script original não foi encontrado em nenhuma fonte**, então é hipótese, rotulada nos cabeçalhos e em `docs/known-issues.md`.
- Corregido
Quest que o jogador não conseguia aceitar embora o cliente a mostrasse disponível (Olive, "A Somewhat Decent Proposal", 32256
Quest que o jogador não conseguia aceitar embora o cliente a mostrasse disponível (Olive, "A Somewhat Decent Proposal", 32256: `requirements not met` a cada clique no ACCEPT). O `Check.img` dessas quests traz `QuestOrOption = 1`, que o servidor nunca lia: a lista de quests pré-requisito é de alternativas (a 32256 pede a 32240 **ou** a 2646, que se excluem para o Dual Blade), e o servidor exigia todas. 89 quests têm o campo. `QuestOrOptions` lê `resources/quest-or-option.txt` (gerado do `Quest.wz`) e `QuestManager.canStartQuest` passa a exigir só uma das quests pré-requisito nelas; nível, classe e itens continuam valendo. A lista fica fora do `quests.dat` de propósito: mudar o formato obrigaria a regenerar todas as quests. `audit_quests.py` agora falha quando a lista e o `Quest.wz` divergem e tem `--write-or-option` para regenerá-la. Pede reinício (Java e resources).
- Corregido
Quest 2646 (The Explorer Book and A Maple Leaf, Dual Blade) ganha q2646s e q2646e
Quest 2646 (The Explorer Book and A Maple Leaf, Dual Blade) ganha `q2646s` e `q2646e`: lâmpada da Athena Pierce, EXP 170 do `Act.img` e Explorer Book `4460000` (`String.wz`). Sem `Say.img`; fala do `QuestInfo`. A 32240 é a versão para Explorers gerais e continua sem script.
- Corregido
Taeha (1055002, The Secret Garden Basement) abria unknown_shop ("This shop is empty")
Taeha (1055002, The Secret Garden Basement) abria `unknown_shop` ("This shop is empty"): o `Npc.wz` marca `info/shop`, mas `shopitems` não tinha linhas. A migration `V85_Add_Taeha_Shop.sql` cadastra a loja (Thin Jr. Necki Skin e Toy Plane a 1 meso para as Dual Blade 2616/2617, mais poções e consumíveis da wiki). O `questid` fica gravado; o encode da loja no v232 ainda não envia esse campo, então os dois itens de quest aparecem sempre.
- Corregido
Quest 2613 (Investigating the Dark Lord, Dual Blade) e a cadeia que ela exige para concluir
Quest 2613 (Investigating the Dark Lord, Dual Blade) e a cadeia que ela exige para concluir: faltavam `q2613s`, `q2613e`, `q2614e` e `q2616e`. Início e falas do `Say.img`; na 2613 o `Act.img` não existe, então o fim usa a recompensa da wiki (nível 20 com 0% de EXP e 5 Return Scroll to Kerning City). A 2614 e a 2616 também sem `Act.img`: EXP e itens pela wiki; a 2617 já tinha `Act.img` e não pedia script.
- Corregido
O idioma escolhido no launcher ou com @lang nunca era gravado
O idioma escolhido no launcher ou com `@lang` nunca era gravado: `ChatLanguageStore.set` não dava commit, e o pool do Hikari entrega conexão sem auto-commit. Toda conta recebia o texto em inglês nos scripts.
- Corregido
Códigos do cliente com letras (#questorderN#, #Wbasic#, #Wselect#, #Wprob#, #jcount#, #Qdaylimit#, #R…#, #MD…#, #illu…#,
Códigos do cliente com letras (`#questorderN#`, `#Wbasic#`, `#Wselect#`, `#Wprob#`, `#jcount#`, `#Qdaylimit#`, `#R…#`, `#MD…#`, `#illu…#`, `#npcN#`) eram traduzidos como texto. `#Wbasic#` saía `#Wbásico#` em 890 resumos de recompensa pt-BR, e `#jcmp#`, `#jhaveN#` e `#jdate#` perdiam o valor do registro. Agora ficam protegidos como os códigos de NPC, mob e mapa.
- Corregido
Texto de quest que o LLM rejeitava inteiro (quebras de linha ou códigos fora do lugar) é retraduzido parágrafo por parágrafo
Texto de quest que o LLM rejeitava inteiro (quebras de linha ou códigos fora do lugar) é retraduzido parágrafo por parágrafo. Linha que é só código fica como está. Isso também cobre texto que mistura quebra real e literal. Cada quebra volta na forma original (`\r\n`, `\n`, real ou escrita). Resultado: 98,5% do texto novo em pt e 98,2% em es saem do LLM; números em `docs/research-log.md`.
- Cambiado
Chat: entre português e espanhol, a etapa até o inglês é feita uma vez por linha e reaproveitada para os outros idiomas
Chat: entre português e espanhol, a etapa até o inglês é feita uma vez por linha e reaproveitada para os outros idiomas (`LibreTranslateClient.translateVia`). Antes, pedir inglês e espanhol para a mesma linha em português traduzia para o inglês duas vezes. Menos CPU por linha (es ~1010 → ~690 ms, pt ~420 → ~260 ms), mesma latência. Medidas e o teste descartado do modelo `es_en` 1.0 em `docs/research-log.md`, 2026-10-18.
- Cambiado
Mobs deixam de largar o que só uma classe desligada usa (arma de tipo exclusivo, escudo Demon, scroll de arma exclusiva,
Mobs deixam de largar o que só uma classe desligada usa (arma de tipo exclusivo, escudo Demon, scroll de arma exclusiva, item de quest de Luminous e Jett): 190 linhas da `mob_drops` vão para `mob_drops_archive` na migration V83, sem apagar. Armas e secundárias de classe desligada também saem das lojas: 346 linhas de `shopitems` vão para `shopitems_archive` na V84. Lançar uma classe devolve tudo com `sql/class-launch/<Classe>.sql`. Lista por classe e passo a passo em `docs/classes.md`.
- Cambiado
A criação libera Resistance, Explorador, Cygnus, Aran, Evan e Dual Blade
A criação libera Resistance, Explorador, Cygnus, Aran, Evan e Dual Blade. As outras entradas de `LoginJob` ficam `JobFlag.DISABLED`. Os ícones correspondentes saem de `order/35` no `UI.wz` do cliente. Como religar uma classe está em `docs/decisions.md`.
- Cambiado
Jogador escolhe o idioma com @lang <pt|en|es>
Jogador escolhe o idioma com `@lang <pt|en|es>`. No chat do mapa, quem está com outro idioma recebe uma segunda linha, em amarelo (`ChatType.Tip`), para não se misturar com o aviso cinza nem com o retorno azul dos comandos. O glossário em `resources/translation/glossary.tsv` segura boss, classe, poção, meso e gíria de pt/en/es. Confiança 0 não gera tradução. Party, guild e whisper ficam de fora.
- Cambiado
Pacote de interface por idioma
Pacote de interface por idioma. `UI.wz` em português e espanhol (só string de janela; nome de mob, item, NPC, mapa, skill e título de missão ficam em inglês). O `String.wz` não é substituído. O launcher, fora deste repositório, escolhe `pt|en|es` antes do login e baixa `http://{ip}:3000/patch/<idioma>/version.json`. O servidor serve essa rota em `/patch`, com os arquivos em `out/lang` (fora do git).
- Cambiado
Fala de NPC e de missão por script sai no idioma do jogador quando o texto está no catálogo resources/translation/script
Fala de NPC e de missão por script sai no idioma do jogador quando o texto está no catálogo `resources/translation/script/strings-script-{pt,es}.tsv` (`ScriptCatalog`, carregado no boot). Texto fora do catálogo e frase montada em runtime ficam em inglês. Sem tradução ao vivo.
- Cambiado
Chat: quando a detecção de idioma é fraca (abaixo de 90), vale o idioma que o falante escolheu
Chat: quando a detecção de idioma é fraca (abaixo de 90), vale o idioma que o falante escolheu. Corrige português lido como espanhol em frase curta.
- Cambiado
Script novo ou editado vale na próxima execução, sem !clearcache
Script novo ou editado vale na próxima execução, sem `!clearcache`: o cache compara a data de modificação do arquivo e recompila quando ela muda. Arquivo ausente não fica mais marcado como ausente no cache.
- Cambiado
Correções manuais de tradução em resources/translation/overrides.tsv
Correções manuais de tradução em `resources/translation/overrides.tsv`. "Equip Type" agora é "Tipo de equipamento".
- Cambiado
String.wz entra no pacote de idioma
`String.wz` entra no pacote de idioma: fala de NPC do cliente (balão, `func`), descrição de item e de skill, dicas, fala de pet. Nomes e fórmulas de skill ficam em inglês.
- Cambiado
Descrições de item e skill do String.wz em pt-BR passam pela mesma cascata
Descrições de item e skill do `String.wz` em pt-BR passam pela mesma cascata: 25.189 dos 25.405 textos. O contexto de cada linha é o nome do item ou da skill. "weapon skin" agora é "visual de arma". Nome de skill de mais de uma palavra citado na descrição fica em inglês, igual ao nome que o jogo mostra.
- Cambiado
Espanhol (diálogos, descrições de quest, item e skill, balões de NPC e catálogo de script) retraduzido pela cascata Tran
Espanhol (diálogos, descrições de quest, item e skill, balões de NPC e catálogo de script) retraduzido pela cascata TranslateGemma 4B → Tower+ 9B → Argos: 97,8% dos 112.252 textos. A validação recusa formas com "vosotros". Números em `docs/research-log.md`.
Fuente: docs/CHANGELOG.md