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á.
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.
Te ajudei?? REP+ e ficamos quites...
Atenciosamente,
Danihcv.
Abraços!
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
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.",
}
Te ajudei?? REP+ e ficamos quites...
Atenciosamente,
Danihcv.
Abraços!
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.
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())
@, 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())
Te ajudei?? REP+ e ficamos quites...
Atenciosamente,
Danihcv.
Abraços!
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.
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í. ^^
Te ajudei?? REP+ e ficamos quites...
Atenciosamente,
Danihcv.
Abraços!
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.
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())
Te ajudei?? REP+ e ficamos quites...
Atenciosamente,
Danihcv.
Abraços!
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
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())
Te ajudei?? REP+ e ficamos quites...
Atenciosamente,
Danihcv.
Abraços!
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.
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())
Te ajudei?? REP+ e ficamos quites...
Atenciosamente,
Danihcv.
Abraços!