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

Puta vida, mano... Uma hora a gnt consegue. sahusahus

 

.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"/>
<parameter key="message_greet" value="Olá, |PLAYER NAME|. O que você procura? {Informações}?"/>
</npc>

.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--
-----------------------------

function creatureSayCallback(cid, type, msg)
if msgcontains(string.lower(msg), 'informações') then
	if getPlayerVocation(cid) == voc then
		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
	else
	npcHandler:say('Perai, você é '..getVocationInfo(getPlayerVocation(cid)).name..'?! Não falo com gente do seu tipo.', cid)
	npcHandler:releaseFocus(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

 

Puta vida, mano... Uma hora a gnt consegue. sahusahus

 

.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"/>
<parameter key="message_greet" value="Olá, |PLAYER NAME|. O que você procura? {Informações}?"/>
</npc>
.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--
-----------------------------

function creatureSayCallback(cid, type, msg)
if msgcontains(string.lower(msg), 'informações') then
	if getPlayerVocation(cid) == voc then
		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
	else
	npcHandler:say('Perai, você é '..getVocationInfo(getPlayerVocation(cid)).name..'?! Não falo com gente do seu tipo.', cid)
	npcHandler:releaseFocus(cid)
	end
end
return true
end

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

A msg greet que ele manda não é a do xml, é essa>Welcome, Teste! I have been expecting you.

 

E quando a voc permitida fala pra ele 'informações', ele não responde nada. Pra voc não permitida, ele ta normal quando fala 'informações' pra ele. Hahaha ta quase lá.

Link para o comentário
Compartilhar em outros sites

  • 0

Urrgh....

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 greetCallback(cid)
	npcHandler:say('Olá, '..getCreatureName(cid)..'. O que você procura? {Informações}?', cid)
	return true
end

function creatureSayCallback(cid, type, msg)
if msgcontains(string.lower(msg), 'informações') then
	if getPlayerVocation(cid) == voc then
	npcHandler:say('Sobre o que você quer saber? Sobre a {mysterious island} ou sobre a {second promotion}?', cid)
		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)
			return true
			end
		end
	else
	npcHandler:say('Perai, você é '..getVocationInfo(getPlayerVocation(cid)).name..'?! Não falo com gente do seu tipo.', cid)
	npcHandler:resetNpc(cid)
	end
end
return true
end

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

Mais tarde eu dou um jeito de arranjar um modo pra testar os scripts... Pra não ficar passando trocentos scripts sem saber se tão 100%. Até lá, não perca a paciência. sauhsauhsa

Link para o comentário
Compartilhar em outros sites

  • 0

Urrgh....

 

Agora ele manda a msg> Welcome, Teste! I have been expecting you.< no default e no chat NPC ju to com a 'Olá......'.

E agora ele responde ao dizer 'informações', mas não responde aos outros gatilhos.

Kkkkkkkkkkkkkkk A paciência aqui é em dobro, porque o meu not é ruim, e com o server aberto, fica muito lento pra atualizar a pag pra pegar e testar o novo script. Kkkkkkkk

Link para o comentário
Compartilhar em outros sites

  • 0

sahusauhas, então de boa. Acredito que agr só apareça uma mensagem de "olá":

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 greetCallback(cid)
	npcHandler:say('Olá, '..getCreatureName(cid)..'. O que você procura? {Informações}?', cid)
	return true
end

function creatureSayCallback(cid, type, msg)
if msgcontains(string.lower(msg), 'informações') then
	if getPlayerVocation(cid) == voc then
	npcHandler:say('Sobre o que você quer saber? Sobre a {mysterious island} ou sobre a {second promotion}?', cid)
		for k, v in pairs(msgs) do
			if msgcontains(string.lower(msg), v) then
			npcHandler:say(msgs[v], cid)
			return true
			end
		end
	else
	npcHandler:say('Perai, você é '..getVocationInfo(getPlayerVocation(cid)).name..'?! Não falo com gente do seu tipo.', cid)
	npcHandler:resetNpc(cid)
	end
end
return true
end

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

  • 0

Esse último também não funcionou, além dele mandar aquela mensagem, 'Welcome....', invés da, 'Olá....', ele também não responder os gatilhos da voc permitida. kkkkkk
Mas eu tive uma ideia, testei e funcionou. haha Apaguei a função greetCallback do script e coloquei no XML, dai começou a mandar a msg 'Olá' ao invés da 'Welcome'. Mas ainda não respondia aos gatilhos, dai resolvi por eles no XML também e finalmente funcionou. xD
O único ruim, é que o script só da pra por uma vocação, quando tento por mais, não funciona (se desse pra você me elucidar em como resolver isso, agradeço). Tirando isso, deu pro gasto. Valeu ai, vou ver se consigo aproveitar a função de bloqueio e por pra um NPC de troca também.

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 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 vocations = {3, 7}

local msgDeny = "Nao falo com paladins"

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

--FIM DA PARTE CONFIGURAVEL--

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

 

function onCreatureSay(cid, type, msg)

for _, allowVoc in pairs(vocations) do

if getPlayerVocation(cid) == allowVoc then

return npcHandler:onCreatureSay(cid, type, msg)

end

end

return npcHandler:say(msgDeny, cid)

end

 

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())

 

 

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

  • 0

@, manda como vc deixou as coisas.

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"/>
<parameters>
	<parameter key="message_greet" value="Olá, |PLAYERNAME|. O que você procura? {Informações}?"/>
	<!--KEYWORDS-->
	<parameter key="module_keywords" value="1"/>
	<parameter key="keywords" value="second promotion;mysterious island"/>
	<parameter key="keyword_reply1" value="Tem uma pessoa que pode lhe promover para segunda vocação. Ele aparece de vez em quando nas planícies de Thais. Espero que dê sorte de encontra-lo."/>
	<parameter key="keyword_reply2" value="As vezes, aparece um teleport no pantano de Venore, talvez, ele leve para esse lugar lendário."/>
</parameters>
</npc>

 

 

 

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--
-----------------------------

function creatureSayCallback(cid, type, msg)
if msgcontains(string.lower(msg), 'informações') then
	if getPlayerVocation(cid) == voc then
	npcHandler:say('Sobre o que você quer saber? Sobre a {mysterious island} ou sobre a {second promotion}?', cid)
		for k, v in pairs(msgs) do
			if msgcontains(string.lower(msg), v) then
			npcHandler:say(msgs[v], cid)
			return true
			end
		end
	else
	npcHandler:say('Perai, você é '..getVocationInfo(getPlayerVocation(cid)).name..'?! Não falo com gente do seu tipo.', cid)
	npcHandler:releaseFocus(cid)
	end
end
return true
end

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

 

 

 

Depois testo o teu script, Caronte.

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

  • 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

×
×
  • Criar Novo...