RA

[OTClient / TFS 0.3.6] Diálogo de NPC por clique esquerdo — janela e opções

Por raulcdj, 01 de out. de 2026 em Mods, funções e outros

1
217
raulcdjR
01 de outubro de 2026 às 17:00

Diálogo OTPokemon completo — tutorial de instalação

Download: https://www.mediafire.com/file/syn6945l07m10ef/Dialogo-OTPokemon-Completo.zip/file

1. Escolher a versão correta

Esta é a cópia local LEGADA: servidor envia table.serialize e cliente interpreta com loadstring/pcall. Não misture com a Nurse Joy JSON, que usa o mesmo módulo game_npcdialog e opcode 80. Escolha uma versão e instale suas duas pontas.

Faça backup. Extraia o ZIP e localize client e server. O pacote contém módulo original, fundo, fonte com PNG, helpers, trecho de clique e NPC de exemplo. Não inclui cliente inteiro, executável, mapa, DAT/SPR ou banco. pcall captura erro, mas não isola a execução do buffer; use este cliente somente com seu servidor confiável.

2. Copiar módulo e fonte do cliente

- client/modules/game_npcdialog → modules/game_npcdialog

- Os dois arquivos de client/data/fonts → data/fonts

Mantenha npcdialog.lua, npcdialog.otui, npcdialog.otmod e window.png juntos. Confira carregamento de sans-bold-16px pelo .otfont do seu bootstrap. O arquivo window.ase é o projeto do fundo; não precisa abri-lo para jogar.

Carregue game_npcdialog depois de corelib e game_interface. O otmod tem autoload e prioridade 1001, mas o bootstrap do fork precisa respeitar esse carregamento. Não mantenha uma segunda cópia do módulo ou handler de opcode 80.

3. Conferir helpers do cliente

Abra client/integracao/corelib_helpers.lua do ZIP. Acrescente switch em modules/corelib/util.lua se não existir. Confira string.split e acrescente somente se necessário. Os helpers precisam estar disponíveis antes de carregar game_npcdialog. Preserve o restante de corelib; não substitua a biblioteca inteira.

4. Copiar e carregar a biblioteca do servidor

Copie server/data/lib/npcdialog_lib.lua para data/lib/npcdialog_lib.lua. Ela precisa carregar no ambiente dos NPCs, não apenas nas actions.

Confira table.serialize e table.find. Os trechos estão em server/integracao/table_serialize.lua: integre-os na biblioteca de tabelas da base, antes de usar npcdialog_lib. Se já existem, não duplique. Não substitua 012-table.lua inteira.

O servidor precisa de NpcSystem/FocusModule e doSendPlayerExtendedOpcode. Se sua base já possui essas APIs, esta integração não exige recompilação. Se não possui, adapte a source antes de instalar.

5. Testar primeiro com o NPC de exemplo

Copie o XML de server/data/npc para data/npc e o script de server/data/npc/scripts para data/npc/scripts. Preserve os nomes e a referência script do XML. Configure o NPC no spawn/mapa. Ajuste lookType 128 para um ID válido no seu DAT.

Abra servidor e cliente, deixe o NPC visível e fale hi. Teste as opções e Fechar. Só depois integre seus NPCs existentes.

6. Usar o diálogo nos seus NPCs

No callback de cumprimento do NPC, use o envio abaixo, preservando a lógica original de foco:

doSendDialogNpc(cid, getNpcId(), "Como posso ajudar?", "Opção 1-Opção 2-Fechar")

Trate os textos das escolhas no callback de mensagens do NPC. Antes de executar a ação, confira npcHandler:isFocused(cid). Para fechar:

doSendDialogNpcClose(cid)

A janela não cria automaticamente cura, loja ou quest: os callbacks do seu NPC continuam responsáveis por essas ações. O separador desta versão é hífen (-), não &. Não use hífen dentro do nome de uma opção.

7. Ativar o clique esquerdo

client/clique_esquerdo.lua é um trecho. Insira DENTRO de processMouseAction em modules/game_interface/gameinterface.lua, depois de local keyboardModifiers = g_keyboard.getModifiers(). Preserve as outras ações; se já está instalado, não duplique.

O clique esquerdo sem modificadores manda hi para cumprimentar um NPC. Foco/distância continuam no NpcSystem. Com NPCs próximos, o hi pode atender outro NPC. A classificação isNpc do protocolo precisa estar correta.

8. Conferir opcode e testar

O opcode é 80. Se já usado na direção servidor→cliente, escolha um livre e altere na biblioteca e no módulo. Cliente e servidor precisam usar o mesmo número e o mesmo formato legado.

Teste abrir/fechar, aspas/quebras na mensagem, todas as opções, andar, Escape e logout. O NPC precisa estar no mapa visível. Andar/Escape/logout fecham a janela visual; o servidor continua gerenciando o foco.

Fonte não encontrada: confira os dois arquivos da fonte e seu bootstrap. Erro switch/string.split/table.serialize: confira os passos 3 e 4 e a ordem de carregamento. Janela não abre: confira módulo, ambiente Lua do NPC e opcode. Botões não executam ações: confira foco e callback de mensagens.

Créditos e validação

Origem: https://tibiaking.com/topic/100418-otclient-sistema-de-dialogo-otpokemon/ . Módulo identificado como Gengo, modificado por Biel. Raul compartilha a cópia local e integração de clique, organizada com auxílio do Codex. Créditos OTClient/NpcSystem e autores preservados.

Sintaxe Lua 5.1/XML, serialização e testes simulados de abrir/fechar foram realizados; arquivos originais, fundo e fonte foram conferidos. Não houve novo teste visual/end-to-end durante o repost.

Editado Outubro 2 por raulcdj

Tutorial reorganizado, download MediaFire e sem imagens.