NPCs são parte essencial de qualquer OTServer — vendem itens, dão quests, avançam histórias. Vamos construir, passo a passo, a estrutura de um NPC simples: um vendedor que cumprimenta o jogador e vende um item básico.
Um NPC em engines como o TFS geralmente é composto por dois arquivos: um .xml, que define aparência e dados básicos, e um .lua, que define o comportamento (o que ele fala e faz).
<npc name="Mercador" script="mercador.lua" walkinterval="2000" floorchange="0">
<health now="100" max="100"/>
<look type="128" head="78" body="69" legs="58" feet="76" addons="0"/>
</npc>
local npcHandler = NpcHandler:new()
NpcSystem.parseParameters(npcHandler)
function onCreatureAppear(cid, creature)
npcHandler:onCreatureAppear(cid, creature)
end
function onCreatureDisappear(cid, creature)
npcHandler:onCreatureDisappear(cid, creature)
end
function onCreatureSay(cid, type, msg)
npcHandler:onCreatureSay(cid, type, msg)
end
npcHandler:setMessage(MESSAGE_GREET, "Olá, |PLAYERNAME|! Quer comprar algo?")
npcHandler:setMessage(MESSAGE_FAREWELL, "Até mais, aventureiro!")
O marcador |PLAYERNAME| é substituído automaticamente pelo nome do jogador que está conversando — um detalhe pequeno que já deixa o NPC mais natural.
Pra transformar esse NPC num vendedor de verdade, você registra uma lista de itens vendáveis, cada um com nome, id e preço:
local shopItems = {
{id = 2160, name = "crystal coin", price = 100, sell = 0},
{id = 2171, name = "small health potion", price = 15, sell = 5},
}
npcHandler:addModule(FocusModule:new())
ShopModule.new(shopItems)
Com isso, ao falar palavras-chave como "trade" ou abrir o comércio pelo próprio client, o jogador já consegue comprar e vender os itens definidos.
Depois de salvar os dois arquivos na pasta de NPCs da engine e reiniciar (ou recarregar) o servidor, entre com um personagem de teste, encontre o NPC no mapa, fale com ele e confira: a saudação aparece? O comércio abre corretamente? Os preços batem com o que você configurou?
Dica: comece sempre copiando um NPC simples já funcional da própria engine como base, em vez de escrever tudo do zero — é mais fácil identificar o que mudar do que montar a estrutura inteira na mão.
Esse é só o esqueleto básico. A partir daqui dá pra evoluir pra NPCs com diálogos condicionais, quests completas e sistemas de missão — mas o princípio de cumprimento, fala e módulo de comércio é a base de praticamente todos eles.