GA
pedido

NPC que só fala com certa vocation.

Por gabriel28, 25 de jan. de 2016 em Scripts

resolvido
script
26
3.1k
gabriel28G
27 de janeiro de 2016 às 19:39

O xml que estou usando é esse:

<?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>
E está dando os mesmo erros.
Creio que desse jeito de fazer checagem logo quando fala 'hi' ta complicado. Pensei em outra forma, caso você ache melhor. Seria assim:

Player: hi
NPC: O que você procura? {Informações}?
Player: informações
​NPC: >se não for a voc permitida< Perai, você é PLAYER VOCATION? Não falo com gente do seu tipo
NPC: <se for a voc permitida< Sobre o que você quer se informar? Sobre a {Mysterious island} ou sobre a {Second vocation}?

Up
DanihcvD
27 de janeiro de 2016 às 19:56

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())
gabriel28G
27 de janeiro de 2016 às 20:21

 

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

DanihcvD
27 de janeiro de 2016 às 20:42

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

gabriel28G
27 de janeiro de 2016 às 21:02

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

DanihcvD
28 de janeiro de 2016 às 02:07

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())
gabriel28G
28 de janeiro de 2016 às 14:28

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.

CaronteC
28 de janeiro de 2016 às 14:42


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 Janeiro 28 por Caronte

DanihcvD
28 de janeiro de 2016 às 15:41

@, manda como vc deixou as coisas.

gabriel28G
28 de janeiro de 2016 às 17:18

@, 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 Janeiro 28 por gabrielvs

DanihcvD
30 de janeiro de 2016 às 20:12
Melhor resposta

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.

Editado Fevereiro 1 por Danihcv