- Fórum
- OTServ
- Recursos
- Scripting
- Mods, funções e outros
- [PokéTibia / TFS 0.3.6] Nurse Joy com janela — Curar, Registrar e Fechar
RA
[PokéTibia / TFS 0.3.6] Nurse Joy com janela — Curar, Registrar e Fechar
Por raulcdj, há 9h em Mods, funções e outros
1
13
info
Grupo: Artesão
Registrado: 18/01/17
Posts: 142
Reputação: +3
Gênero: Masculino
Nurse Joy com janela: Curar, Registrar e Fechar — PokéTibia / TFS 0.3.6
Compartilhando a Nurse Joy da minha base com dialogo no OTClient. A janela mostra o nome e outfit da Nurse, mensagem e botoes Curar/Registrar/Fechar. Cura o treinador, Pokemon solto quando permitido, Ball do slot 8 e Balls da mochila; restaura HP, cooldowns move1..move15, felicidade e fome conforme a configuracao da base. O registro libera uma cidade no sistema de Teleport existente. Nao implementa o Teleport completo.
E uma aplicacao do sistema de dialogo por clique esquerdo que compartilhei antes. O pacote abaixo inclui os arquivos das duas pontas, para nao depender de baixar outro topico. Edicao publica adaptada: JSON no transporte, registro explicitamente configurado no XML e verificacao de mochila valida. A base em uso nao foi alterada. A imagem de demonstracao corresponde a base original; na edicao publica a fonte usa verdana-11px-rounded e pode mudar ligeiramente a aparencia. O fundo window.png do modulo foi mantido.
DEPENDENCIAS: OTClient com extended opcodes, json.decode do corelib, UICreature, estilos Button/Label/ScrollablePanel e fonte verdana-11px-rounded. TFS 0.3.6 / PokexGeneration com NpcSystem, FocusModule, doSendPlayerExtendedOpcode e os helpers/tabelas da sua base. Nao funciona somente copiando heal.lua num TFS puro.
Servidor: copie os arquivos server/data para as mesmas pastas de data. A biblioteca npcdialog_lib.lua deve carregar tambem no ambiente dos NPCs. Nurse.xml aponta para heal.lua; se sua Nurse tem outro XML, preserve seu look/nome e altere apenas script e parametros. Configure/coloque a Nurse no mapa/spawn como de costume. O lookType 532 pertence a esta base; use um ID valido no seu DAT. Faça backup antes de substituir heal.lua: todas as Nurses que o usam receberao a mudanca.
Registro de cidade: ajuste no XML <parameter key="teleportStorage" value="0"/>. Zero deixa o registro desativado. Use a storage que seu menu de Teleport realmente consulta para aquela cidade; exemplo: 897530 SOMENTE se seu Teleport usa esse numero. Registrar grava 1 nessa storage; nao teleporta, nao muda automaticamente townId e nao adiciona destinos ao menu. Nurses de cidades diferentes devem usar storages diferentes. Na edicao publica, Curar nao cadastra cidade automaticamente. Coordenadas particulares e a busca automatica do templo mais proximo foram retiradas para evitar registrar cidade errada em outro mapa.
Cliente: copie os arquivos client/modules/game_npcdialog para modules/game_npcdialog e carregue o modulo depois de corelib/game_interface. Se ja instalou a edicao JSON do meu topico anterior, atualize somente o OTUI/fundo para esta aparencia e use os scripts Nurse do servidor; nao registre o opcode duas vezes. Nao misture o servidor JSON com cliente antigo que usa loadstring/table.serialize.
Clique esquerdo: o bloco client/clique_esquerdo.lua vai DENTRO de processMouseAction em game_interface/gameinterface.lua, logo depois de local keyboardModifiers = g_keyboard.getModifiers(). Preserve o restante do arquivo. Ele manda hi quando o clique esquerdo sem modificadores identifica um NPC. NpcSystem cuida do foco/distancia; com dois NPCs juntos o hi pode escolher outro NPC proximo. Use classificacao isNpc correta no protocolo. O jogador tambem pode cumprimentar pela fala.
Opcode 80 reservado ao dialogo servidor->cliente: se ja usado nessa direcao, altere nas duas pontas. O modulo fecha ao andar, sair do jogo ou pressionar Escape. Fechar libera o foco no servidor. Botoes usam hifen como separador; nao use hifen dentro do nome de uma opcao.
Configuracao de cura: a base precisa definir nurseHealsOnlyInPZ, nurseHealsPokemonOut, baseNurseryHappiness, baseNurseryHunger e pokeballs (entradas all/on). Tambem usa exhaustion.get/set, isPokeball, getPokeballsInContainer, setCD, doCureStatus e opcionalmente doUpdateMoves quando useKpdoDlls=true. Flags false/nil desativam suas respectivas exigencias, mas fome/felicidade precisam de valores numericos. Nao sobrescreva configuration.lua inteira. Exaustao: storage 9211 por 5 segundos; duelo: storage 52480; Fly/Ride/Surf: 17000/17001/63215. Confira conflitos. O HP da Ball e fracao: hp=1 significa cheia. IDs on das Balls precisam ser os seus. Outros atributos como boost, level, held e nick nao sao zerados por este script.
Validacao: Lua 5.1/XML e testes simulados de foco, abrir/voltar/fechar, registrar/repetir/desativado, bloqueio em duelo/PZ/exaustao, Pokemon solto proibido, cura de treinador/slot/mochila e mochila ausente. O transporte JSON e clique foram verificados no pacote anterior. Nao foi feito novo teste visual/end-to-end desta edicao no cliente, nem teste de todas as combinacoes de Balls. Teste em copia da base antes de producao.
Creditos: modulo original game_npcdialog identificado como Gengo, modificado por Biel; OTClient team e autores do fork; autores do NpcSystem e do sistema de cura/PokéTibia preexistente. Raul compartilha sua integracao, organizada com auxilio do Codex. Nao reivindico autoria de todos os componentes. Nao acompanha executavel, cliente completo, sprites, banco ou mapa.
Arquivos completos abaixo. Salve cada bloco no caminho indicado.
client/clique_esquerdo.lua
client/modules/game_npcdialog/npcdialog.lua
client/modules/game_npcdialog/npcdialog.otmod
client/modules/game_npcdialog/npcdialog.otui
server/data/lib/npcdialog_lib.lua
server/data/npc/Nurse.xml
server/data/npc/scripts/heal.lua
Fundo window.png — recriar sem anexo
Na pasta modules/game_npcdialog do cliente, abra PowerShell e execute o bloco abaixo. Ele grava somente window.png nessa pasta. Se preferir outro fundo, ajuste image-source no OTUI.
[System.IO.File]::WriteAllBytes((Join-Path (Get-Location) 'window.png'), [Convert]::FromBase64String('iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAACVUlEQVR4nO3dv07yUBiA8bcNXICzW3cTEyMX4O4d6aR35N5dCMTEWTZnZ0MEB77iaVMK8WvNk/D8NnOwad6H0z8TWfwzKfJNJKbLdRYazL5559Xi89tX5z+oP13zzg4NvipnoP9z7BxHhw5UHeDq+qafMztZ5VFf6FFExMPFbevi/etTRGxjzGdlX2d2ktIZds17FBHxuVi0H2X8c6Dlx/hlmFM9EbPysppl17x317W71Xlt7XH8boyeFWerXZS2eU+X62z3aNu82RhjGGmUVHXTr71rpDdwYwynGSV958ubHzbG8JYf45f5rGx9cq1dsozxt9KdUntTF4dBYAwCYxAYg8AYBMYgMAaBMQiMQWAMAmMQGIPAGATGIDAGgTEIjEFgDAJjEBiDwBgExiAwBoExCIxBYAwCYxAYg8AYBMYgMAaBMQiMQWAMAmMQGIPAGATGIDAGgTEIjEFgDAJjEBiDwBgExiAwBoExCIxBYAwCYxAYg8AYBMYgMAaBMQiMQWAMAmMQGIPAGATGIDAGgTEIjEFgDAJjEBiDwBgExiAwBoExCIxBYAwCYxAYg8AYBMYgMFn6h7+p/nfafks9omWHzGdlXF3fRHG2uvzbUzwdaYymXZlJkW/SBXfKMPbFqHZJHrGN8fz2VfuAO6V/aYzmvKsNkTV3RpM7pR9dl6nUwSARP1H0e8fOMJsU+ebh4rZ18f71qXZA/V4ao2veo4iIz8Wi/SjjSB7JyoM7Sd2my3U2KfJN17yziO0N5W51Xlt7HL/Xno/Vn655733sNcaw9s37G4DX+20+pJNdAAAAAElFTkSuQmCC'))