Ir para conteúdo
  • 0

NPC que só fala com certa vocation.


gabriel28

Pergunta

Gostaria de um NPC que só falasse com certa vocation (que pudesse ser configurado para eu poder adaptar pra outras). O NPC seria um de conversa. Quando o player não tivesse a vocação certa pra falar com ele, ele diria, ex: "Não falo com Sorcerers". Se desse pra colocar uma verificação de vocação pra essa fala condizer com a vocação do player, ficando: "Não falo com Druids"; "Não falo com Paladins"; etc..., agradeceria. A conversa podem por qualquer coisa que eu mudo depois. Uso TFS 0.4 rev 3884.

Agradeço desde já.

Editado por gabrielvs
Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

FINALMENTEE!!!!! shuahsuauhas Consegui!

 

Eis o .lua:

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

function onCreatureAppear(cid)                npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid)             npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg)     npcHandler:onCreatureSay(cid, type, msg) end
function onThink()                         npcHandler:onThink() end

--------------------------
----PARTE CONFIGURAVEL----
--------------------------
local gatilhos={"informacoes", "mysterious island", "second promotion"}
local msgs = {
["informacoes"] = "Sobre o que você quer saber? Sobre a {mysterious island} ou sobre a {second promotion}?",
["mysterious island"] = 'É uma ilha que antigos diziam ficar ao sudoeste de Carlin. Há um teleport que dizem aparecer nos pântanos de Venore, talvez, ele leve a essa ilha.',
["second promotion"] = 'Há um NPC que vem de muito longe e fica a caminhas pelos campos de Thais, dizem que ele pode dar a segunda vocação para os aventureiros.',
}
local vocs = {1,2,5}
-----------------------------
--FIM DA PARTE CONFIGURAVEL--
-----------------------------
 
function greetCallback(cid)
    if isInArray(vocs, getPlayerVocation(cid)) then
    npcHandler:say('Olá, '..getCreatureName(cid)..'. O que você procura? {Informacoes}?', cid)
    npcHandler:addFocus(cid)
    else
    npcHandler:say('Eu não falo com '..getVocationInfo(getPlayerVocation(cid)).name..'s.', cid)
    npcHandler:resetNpc(cid)
return false
end
    return false
end
 
function creatureSayCallback(cid, type, msg)
for k, v in pairs(gatilhos) do
    if isInArray(vocs, getPlayerVocation(cid)) then
        if msgcontains(msg, v) then
            if msgcontains(msg, v) then
                npcHandler:say(msgs[v], cid)
            end
        elseif msgcontains(msg, 'bye') or msgcontains(msg, 'goodbye') then
        npcHandler:resetNpc(cid)
        return false
        end
    else
        npcHandler:say('Eu ja disse que nao falo com '..getVocationInfo(getPlayerVocation(cid)).name..'s.', cid)
        npcHandler:releaseFocus(cid)
        npcHandler:resetNpc(cid)
    return false
    end
end
return true
end

npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

.xml:

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Ezequiel" script="data/npc/scripts/Ezequiel.lua" walkinterval="1500" speed="100" walkradius="2" floorchange="0">
<health max="100" now="100"/>
<look type="130" head="0" body="64" legs="67" feet="114" addons="1" mount="0"/>
</npc>


Funciona assim:
Essa tabela:

 

local gatilhos={"informacoes", "mysterious island", "second promotion"}

Tem que estar em sincronia com essa:

 

local msgs = {
["informacoes"] = "Sobre o que você quer saber? Sobre a {mysterious island} ou sobre a {second promotion}?",
["mysterious island"] = 'É uma ilha que antigos diziam ficar ao sudoeste de Carlin. Há um teleport que dizem aparecer nos pântanos de Venore, talvez, ele leve a essa ilha.',
["second promotion"] = 'Há um NPC que vem de muito longe e fica a caminhas pelos campos de Thais, dizem que ele pode dar a segunda vocação para os aventureiros.',
}

 

Ou seja, o primeiro gatilho da tabela gatilhos tem que ser o primeiro elemento da tabela msgs. E assim por diante.?

Bom, a espera valeu a pena, caro amigo. sahusauhsauh

Eu mesmo testei e está td certo. ^^


Tópico movido para dúvidas / pedidos resolvidos.

Link para o comentário
Compartilhar em outros sites

  • 0

A parte para o npc dizer que não fala com determinada vocação eu entendi. Mas poderia explicar mais detalhadamente como ocorreria um diálogo do npc com um player com vocação aceitavel?

Tipo, demonstre um diálogo com pelo menos mais de 2 respostas que o npc daria à 2 falas-gatilho do player, etc.

Link para o comentário
Compartilhar em outros sites

  • 0

A parte para o npc dizer que não fala com determinada vocação eu entendi. Mas poderia explicar mais detalhadamente como ocorreria um diálogo do npc com um player com vocação aceitavel?

 

Tipo, demonstre um diálogo com pelo menos mais de 2 respostas que o npc daria à 2 falas-gatilho do player, etc.

 

Você poderia por qualquer coisa que eu alteraria depois. hahaha

Mas sendo assim:

Player: Hi

NPC: Olá, |PLAYER NAME|. Sobre o que você quer saber? Sobre a {mysterious island} ou sobre a {second promotion}?

Player: mysterious island

NPC: É uma ilha que antigos diziam ficar ao sudoeste de Carlin. Há um teleport que dizem aparecer nos pântanos de Venore, talvez, ele leve a essa ilha.

Player: second promotion

NPC: Há um NPC que vem de muito longe e fica a caminhas pelos campos de Thais, dizem que ele pode dar a segunda vocação para os aventureiros.

up

Link para o comentário
Compartilhar em outros sites

  • 0

Vá em data\npc e crie um arquivo chamado npctalk.xml e coloque isso dentro:

*é nesse script q vc coloca a mensagem de saudação:

<?xml version="1.0"?>
<npc name="NpcX" script="data/npc/scripts/npctalk.lua" walkinterval="0">
	<health now="100" max="100"/>
	<look typeex="1448"/>
	<parameter key="message_greet" value="Olá, |PLAYER NAME|. Sobre o que você quer saber? Sobre a {mysterious island} ou sobre a {second promotion}?"/>
</npc>

Agora vá em data\npc\scripts e crie um arquivo chamado npctalk.lua e coloque isso dentro:

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

function onCreatureAppear(cid)				npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) 			npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) 		npcHandler:onCreatureSay(cid, type, msg) end
function onThink() 							npcHandler:onThink() end

--------------------------
----PARTE CONFIGURAVEL----
--------------------------
local msgs = {
["mysterious island"] = "É uma ilha que antigos diziam ficar ao sudoeste de Carlin. Há um teleport que dizem aparecer nos pântanos de Venore, talvez, ele leve a essa ilha.",
["second promotion"] = "Há um NPC que vem de muito longe e fica a caminhas pelos campos de Thais, dizem que ele pode dar a segunda vocação para os aventureiros.",
}
-----------------------------
--FIM DA PARTE CONFIGURAVEL--
-----------------------------

function creatureSayCallback(cid, type, msg)
for k, v in pairs(msgs) do
	if msgcontains(msg, v) then
	npcHandler:say(msg[v], cid)
	end
end
return true
end

npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

É nessa parte do script q vc configura o [gatilho] e a mensagem de resposta do npc:

 

local msgs = {
["mysterious island"] = "É uma ilha que antigos diziam ficar ao sudoeste de Carlin. Há um teleport que dizem aparecer nos pântanos de Venore, talvez, ele leve a essa ilha.",
["second promotion"] = "Há um NPC que vem de muito longe e fica a caminhas pelos campos de Thais, dizem que ele pode dar a segunda vocação para os aventureiros.",
}

 

Link para o comentário
Compartilhar em outros sites

  • 0

Vá em data\npc e crie um arquivo chamado npctalk.xml e coloque isso dentro:

*é nesse script q vc coloca a mensagem de saudação:

<?xml version="1.0"?>
<npc name="NpcX" script="data/npc/scripts/npctalk.lua" walkinterval="0">
	<health now="100" max="100"/>
	<look typeex="1448"/>
	<parameter key="message_greet" value="Olá, |PLAYER NAME|. Sobre o que você quer saber? Sobre a {mysterious island} ou sobre a {second promotion}?"/>
</npc>

Agora vá em data\npc\scripts e crie um arquivo chamado npctalk.lua e coloque isso dentro:

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

function onCreatureAppear(cid)				npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) 			npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) 		npcHandler:onCreatureSay(cid, type, msg) end
function onThink() 							npcHandler:onThink() end

--------------------------
----PARTE CONFIGURAVEL----
--------------------------
local msgs = {
["mysterious island"] = "É uma ilha que antigos diziam ficar ao sudoeste de Carlin. Há um teleport que dizem aparecer nos pântanos de Venore, talvez, ele leve a essa ilha.",
["second promotion"] = "Há um NPC que vem de muito longe e fica a caminhas pelos campos de Thais, dizem que ele pode dar a segunda vocação para os aventureiros.",
}
-----------------------------
--FIM DA PARTE CONFIGURAVEL--
-----------------------------

function creatureSayCallback(cid, type, msg)
for k, v in pairs(msgs) do
	if msgcontains(msg, v) then
	npcHandler:say(msg[v], cid)
	end
end
return true
end

npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

É nessa parte do script q vc configura o [gatilho] e a mensagem de resposta do npc:

 

 

Não entendo de script, mas não to vendo a parte que fica o bloqueio de vocações.

Link para o comentário
Compartilhar em outros sites

  • 0
Fazer um complementozinho aqui no script do Dani... É que ele não fez a checagem que você queria, de não falar pro player de tal voc.


local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
 
function onCreatureAppear(cid)                npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid)             npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg)         npcHandler:onCreatureSay(cid, type, msg) end
function onThink()                             npcHandler:onThink() end
 
--------------------------
----PARTE CONFIGURAVEL----
--------------------------
local msgs = {
["mysterious island"] = "É uma ilha que antigos diziam ficar ao sudoeste de Carlin. Há um teleport que dizem aparecer nos pântanos de Venore, talvez, ele leve a essa ilha.",
["second promotion"] = "Há um NPC que vem de muito longe e fica a caminhas pelos campos de Thais, dizem que ele pode dar a segunda vocação para os aventureiros.",
}
local voc = 3 -- Voc que ele irá falar.
-----------------------------
--FIM DA PARTE CONFIGURAVEL--
-----------------------------
 
function creatureSayCallback(cid, type, msg)
 
if getPlayerVocation(cid) == voc then
for k, v in pairs(msgs) do
    if msgcontains(msg, v) then
    npcHandler:say(msg[v], cid)
    end
end
else
return npcHandler:say("Não falo com "..getPlayerVocationName(cid).."s.", cid)
end 
return true
end
 
npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())


Editado por christopher17288
Link para o comentário
Compartilhar em outros sites

  • 0

@, putz, vdd. tinha esquecido que vc queria isso... shauhusa

 

Caso o do amigo acima ñ funcione, põe assim:

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

function onCreatureAppear(cid)				npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) 			npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) 		npcHandler:onCreatureSay(cid, type, msg) end
function onThink() 							npcHandler:onThink() end

--------------------------
----PARTE CONFIGURAVEL----
--------------------------
local msgs = {
["mysterious island"] = "É uma ilha que antigos diziam ficar ao sudoeste de Carlin. Há um teleport que dizem aparecer nos pântanos de Venore, talvez, ele leve a essa ilha.",
["second promotion"] = "Há um NPC que vem de muito longe e fica a caminhas pelos campos de Thais, dizem que ele pode dar a segunda vocação para os aventureiros.",
}

local voc = 3
-----------------------------
--FIM DA PARTE CONFIGURAVEL--
-----------------------------

function creatureSayCallback(cid, type, msg)
if getPlayerVocation(cid) == voc then
	for k, v in pairs(msgs) do
		if msgcontains(msg, v) then
		npcHandler:say(msg[v], cid)
		end
	end
else
npcHandler:say('Eu não falo com '..getVocationInfo(getPlayerVocation(cid)).name..'s.', cid)
return true
end

npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Link para o comentário
Compartilhar em outros sites

  • 0

Nemhum dos dois está funcionando corretamente. Eu gostaria que a checagem fosse feita quando falasse 'Hi', mas só faz depois que o player faz alguma pergunta. Na checagem, ta indo bem. Quando é uma voc que não está liberada no script, ele diz direitinho que não fala com gente daquela vocação, mas quando é um da vocação configurada pra ele falar, ele não ignora mas também não reaponde as perguntas. Não da nenhum erro no console.

Link para o comentário
Compartilhar em outros sites

  • 0

Erro meu... Chamei a table errada. Agora deve estar como vc deseja:

npctalk.lua:

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

function onCreatureAppear(cid)				npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) 			npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) 		npcHandler:onCreatureSay(cid, type, msg) end
function onThink() 							npcHandler:onThink() end

--------------------------
----PARTE CONFIGURAVEL----
--------------------------
local msgs = {
["mysterious island"] = "É uma ilha que antigos diziam ficar ao sudoeste de Carlin. Há um teleport que dizem aparecer nos pântanos de Venore, talvez, ele leve a essa ilha.",
["second promotion"] = "Há um NPC que vem de muito longe e fica a caminhas pelos campos de Thais, dizem que ele pode dar a segunda vocação para os aventureiros.",
}
local msgAccept = "Olá, |PLAYER NAME|. Sobre o que você quer saber? Sobre a {mysterious island} ou sobre a {second promotion}?"
local msgDenied = "Eu não falo com "..getVocationInfo(getPlayerVocation(cid)).name.."s."
local voc = 3
-----------------------------
--FIM DA PARTE CONFIGURAVEL--
-----------------------------

function greetCallback(cid)
	if getPlayerVocation(cid) == voc then
	npcHandler:say(msgAccept, cid)
	else
	npcHandler:say(msgDenied, cid)
	end
end

function creatureSayCallback(cid, type, msg)
	for k, v in pairs(msgs) do
		if msgcontains(msg, v) then
		npcHandler:say(msgs[v], cid)
		end
	end
return true
end

npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

npctalk.xml:

<?xml version="1.0"?>
<npc name="NpcX" script="data/npc/scripts/NpcX.lua" walkinterval="0">
	<health now="100" max="100"/>
	<look typeex="1448"/>
</npc>

#OBS: amigo, se o meu script anterior não deu nenhum erro e vc não o alterou antes de testar, pf, garanta de que está fznd a instalação de forma correta, pois eu identifiquei um erro no meu script anterior: estava faltando um END. Não sei se vc havia percebido e então corrigiu, então.. Atenção aí. ^^

Link para o comentário
Compartilhar em outros sites

  • 0

Eu tinha percebido a falta do 'end' dai testei o seu mesclado com o outro. Kkkk

Agora tem três problemas:

Dando erro bo console;<internationalGetPlayerInfo> Player not found when requeating player info #6

 

Quando uma voc bloqueada fala 'Hi', ele não responde mais o nome da vocação, ele diz "Não falo com Nones", pra qualquer vocação que tentar.

 

Quando é a voc permitida, ele manda o Olá, |PLAYER NAME|; sem dizer o nome do player. Além disso, ele só manda a msg e continua caminhando, como se a conversa tivesse acabado.

Editado por gabrielvs
Link para o comentário
Compartilhar em outros sites

  • 0


local keywordHandler = KeywordHandler:new()

local npcHandler = NpcHandler:new(keywordHandler)

NpcSystem.parseParameters(npcHandler)

 

function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end

function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end

function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end

function onThink() npcHandler:onThink() end

 

--------------------------

----PARTE CONFIGURAVEL----

--------------------------

local msgs = {

["mysterious island"] = "É uma ilha que antigos diziam ficar ao sudoeste de Carlin. Há um teleport que dizem aparecer nos pântanos de Venore, talvez, ele leve a essa ilha.",

["second promotion"] = "Há um NPC que vem de muito longe e fica a caminhas pelos campos de Thais, dizem que ele pode dar a segunda vocação para os aventureiros.",

}

local msgAccept = 'Olá, '..getCreatureName(cid)..'. Sobre o que você quer saber? Sobre a {mysterious island} ou sobre a {second promotion}?'

local msgDenied = 'Eu não falo com '..getVocationInfo(getPlayerVocation(cid)).name..'s.'

local voc = 3

-----------------------------

--FIM DA PARTE CONFIGURAVEL--

-----------------------------

 

local function greetCallback(cid)

if getPlayerVocation(cid) == voc then

npcHandler:say(msgAccept, cid)

npcHandler:addFocus(cid)

else

npcHandler:say(msgDenied, cid)

npcHandler:releaseFocus(cid)

return true

end

return false

end

 

function creatureSayCallback(cid, type, msg)

if string.lower(msg) == 'bye' then

npcHandler:resetNpc(cid)

return false

end

 

for k, v in pairs(msgs) do

if msgcontains(msg, v) then

npcHandler:say(msgs[v], cid)

end

end

return true

end

 

npcHandler:setCallback(CALLBACK_GREET, greetCallback)

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

npcHandler:addModule(FocusModule:new())

 

Link para o comentário
Compartilhar em outros sites

  • 0
local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

function onCreatureAppear(cid)				npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) 			npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) 		npcHandler:onCreatureSay(cid, type, msg) end
function onThink() 							npcHandler:onThink() end

--------------------------
----PARTE CONFIGURAVEL----
--------------------------
local msgs = {
["mysterious island"] = "É uma ilha que antigos diziam ficar ao sudoeste de Carlin. Há um teleport que dizem aparecer nos pântanos de Venore, talvez, ele leve a essa ilha.",
["second promotion"] = "Há um NPC que vem de muito longe e fica a caminhas pelos campos de Thais, dizem que ele pode dar a segunda vocação para os aventureiros.",
}
local msgAccept = 'Olá, '..getCreatureName(cid)..'. Sobre o que você quer saber? Sobre a {mysterious island} ou sobre a {second promotion}?'
local msgDenied = 'Eu não falo com '..getVocationInfo(getPlayerVocation(cid)).name..'s.'
local voc = 3
-----------------------------
--FIM DA PARTE CONFIGURAVEL--
-----------------------------

local function greetCallback(cid)
	if getPlayerVocation(cid) == voc then
		npcHandler:say(msgAccept, cid)
		npcHandler:addFocus(cid)
	else
		npcHandler:say(msgDenied, cid)
		npcHandler:releaseFocus(cid)
	return true
	end
return false
end

function creatureSayCallback(cid, type, msg)
	if string.lower(msg) == 'bye' then
	npcHandler:resetNpc(cid)
	return false
	end

	for k, v in pairs(msgs) do
		if msgcontains(msg, v) then
		npcHandler:say(msgs[v], cid)
		end
	end
return true
end

npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

 

Quando tento sumonar ele, da esse erro> lua:17: attempt to concatenate a boolean value

Link para o comentário
Compartilhar em outros sites

  • 0


local keywordHandler = KeywordHandler:new()

local npcHandler = NpcHandler:new(keywordHandler)

NpcSystem.parseParameters(npcHandler)

 

function onCreatureAppear(cid) npcHandler:onCreatureAppear(cid) end

function onCreatureDisappear(cid) npcHandler:onCreatureDisappear(cid) end

function onCreatureSay(cid, type, msg) npcHandler:onCreatureSay(cid, type, msg) end

function onThink() npcHandler:onThink() end

 

--------------------------

----PARTE CONFIGURAVEL----

--------------------------

local msgs = {

["mysterious island"] = "É uma ilha que antigos diziam ficar ao sudoeste de Carlin. Há um teleport que dizem aparecer nos pântanos de Venore, talvez, ele leve a essa ilha.",

["second promotion"] = "Há um NPC que vem de muito longe e fica a caminhas pelos campos de Thais, dizem que ele pode dar a segunda vocação para os aventureiros.",

}

local voc = 3

-----------------------------

--FIM DA PARTE CONFIGURAVEL--

-----------------------------

 

local function greetCallback(cid)

if getPlayerVocation(cid) == voc then

npcHandler:say('Olá, '..getCreatureName(cid)..'. Sobre o que você quer saber? Sobre a {mysterious island} ou sobre a {second promotion}?', cid)

npcHandler:addFocus(cid)

else

npcHandler:say('Eu não falo com '..getVocationInfo(getPlayerVocation(cid)).name..'s.', cid)

npcHandler:releaseFocus(cid)

return true

end

return false

end

 

function creatureSayCallback(cid, type, msg)

if string.lower(msg) == 'bye' then

npcHandler:resetNpc(cid)

return false

end

 

for k, v in pairs(msgs) do

if msgcontains(msg, v) then

npcHandler:say(msgs[v], cid)

end

end

return true

end

 

npcHandler:setCallback(CALLBACK_GREET, greetCallback)

npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)

npcHandler:addModule(FocusModule:new())

 

Link para o comentário
Compartilhar em outros sites

  • 0

 

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

function onCreatureAppear(cid)				npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) 			npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) 		npcHandler:onCreatureSay(cid, type, msg) end
function onThink() 							npcHandler:onThink() end

--------------------------
----PARTE CONFIGURAVEL----
--------------------------
local msgs = {
["mysterious island"] = "É uma ilha que antigos diziam ficar ao sudoeste de Carlin. Há um teleport que dizem aparecer nos pântanos de Venore, talvez, ele leve a essa ilha.",
["second promotion"] = "Há um NPC que vem de muito longe e fica a caminhas pelos campos de Thais, dizem que ele pode dar a segunda vocação para os aventureiros.",
}
local voc = 3
-----------------------------
--FIM DA PARTE CONFIGURAVEL--
-----------------------------

local function greetCallback(cid)
	if getPlayerVocation(cid) == voc then
		npcHandler:say('Olá, '..getCreatureName(cid)..'. Sobre o que você quer saber? Sobre a {mysterious island} ou sobre a {second promotion}?', cid)
		npcHandler:addFocus(cid)
	else
		npcHandler:say('Eu não falo com '..getVocationInfo(getPlayerVocation(cid)).name..'s.', cid)
		npcHandler:releaseFocus(cid)
	return true
	end
return false
end

function creatureSayCallback(cid, type, msg)
	if string.lower(msg) == 'bye' then
	npcHandler:resetNpc(cid)
	return false
	end

	for k, v in pairs(msgs) do
		if msgcontains(msg, v) then
		npcHandler:say(msgs[v], cid)
		end
	end
return true
end

npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())

Creio que eateja quase lá.

Quando não é a voc permitida, ele diz que não fala com ela, mas mesmo assim, ele abre o chat e diz também a frase default (Welcome, Teste! I have been expecting you.); e fica esperando o player falar algo, mas não responde nengum gatilho (mysterious island; second promotion), mas responde quando dar bye.

 

Quando é a voc permitida, ele da as saudaçoes normal, mas não responde nenhum gatilho.

Link para o comentário
Compartilhar em outros sites

  • 0

Qual o sript.xml que vc tá usando no npc?

 

De qqr forma, tenta assim o .lua:

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)

function onCreatureAppear(cid)				npcHandler:onCreatureAppear(cid) end
function onCreatureDisappear(cid) 			npcHandler:onCreatureDisappear(cid) end
function onCreatureSay(cid, type, msg) 		npcHandler:onCreatureSay(cid, type, msg) end
function onThink() 							npcHandler:onThink() end

--------------------------
----PARTE CONFIGURAVEL----
--------------------------
local msgs = {
["mysterious island"] = "É uma ilha que antigos diziam ficar ao sudoeste de Carlin. Há um teleport que dizem aparecer nos pântanos de Venore, talvez, ele leve a essa ilha.",
["second promotion"] = "Há um NPC que vem de muito longe e fica a caminhas pelos campos de Thais, dizem que ele pode dar a segunda vocação para os aventureiros.",
}
local voc = 3
-----------------------------
--FIM DA PARTE CONFIGURAVEL--
-----------------------------

local function greetCallback(cid)
	if getPlayerVocation(cid) == voc then
		npcHandler:say('Olá, '..getCreatureName(cid)..'. Sobre o que você quer saber? Sobre a {mysterious island} ou sobre a {second promotion}?', cid)
		npcHandler:addFocus(cid)
	else
		npcHandler:say('Eu não falo com '..getVocationInfo(getPlayerVocation(cid)).name..'s.', cid)
		npcHandler:releaseFocus(cid)
	return true
	end
return false
end

function creatureSayCallback(cid, type, msg)
	for k, v in pairs(msgs) do
		if string.lower(msg) == 'bye' then
		npcHandler:resetNpc(cid)
		elseif msgcontains(msg, v) then
		npcHandler:say(msgs[v], cid)
		end
	end
return true
end

npcHandler:setCallback(CALLBACK_GREET, greetCallback)
npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback)
npcHandler:addModule(FocusModule:new())
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...