Ir para conteúdo
  • 0

[Npc] Uma Fala Pra Cada Vocação Quando O Player Dizer Hi


Ekasus

Pergunta

Bom pessoal...

 

Preciso de saber fazer um npc que quando o player dizer hi, verifique a vocaçao do player, se for vocaçao X, dizer X, se for vocaçao Y, dizer Y...

 

Nao preciso de um npc, so preciso saber como faço...

 

Vlw ai a todos que tentarem ajudar

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Você pode colocar mais mensagens, mas cada mensagem é de acordo com a vocations. (A primeira é pra sorcerer (1), a segunda pra druid (2), etc ..)

local salutMsgs = {"Hello, mage of the skies.","Hello my forest enchanter.","Hey! Super shooter ..","Aye, guardian."}
local vocNoPromo = getPlayerVocation(cid) - (4 * getPlayerPromotionLevel(cid))

if(msgcontains(msg, 'hi')) then
selfSay(salutMsgs[vocNoPromo], cid)
end

Link para o comentário
Compartilhar em outros sites

  • 0

Você pode colocar mais mensagens, mas cada mensagem é de acordo com a vocations. (A primeira é pra sorcerer (1), a segunda pra druid (2), etc ..)

local salutMsgs = {"Hello, mage of the skies.","Hello my forest enchanter.","Hey! Super shooter ..","Aye, guardian."}
local vocNoPromo = getPlayerVocation(cid) - (4 * getPlayerPromotionLevel(cid))

if(msgcontains(msg, 'hi')) then
selfSay(salutMsgs[vocNoPromo], cid)
end

 

Ue...

Não deu certo e nem consegui entendi porque...

Fiz um script para testar e ficou assim...

Teste.xml

 

<?xml version="1.0" encoding="ISO-8859-1"?>
<npc name="Teste" script="Teste.lua" walkinterval="0" floorchange="0">
<health now="100" max="100"/>
  <look typeex="1448"/>
</npc>	   

 

Teste.lua

local keywordHandler = KeywordHandler:new()
local npcHandler = NpcHandler:new(keywordHandler)
NpcSystem.parseParameters(npcHandler)
local talkState = {}
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
function creatureSayCallback(cid, type, msg)
  local talkUser = NPCHANDLER_CONVBEHAVIOR == CONVERSATION_DEFAULT and 0 or cid
  local msg = string.lower(msg)  
  local salutMsgs = {"Hello, mage of the skies.","Hello my forest enchanter.","Hey! Super shooter ..","Aye, guardian."}
  local vocNoPromo = getPlayerVocation(cid) - (4 * getPlayerPromotionLevel(cid))
  if(msgcontains(msg, 'hi')) then
  selfSay(salutMsgs[vocNoPromo], cid)
  end
  return true	  
end

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

 

Mas quando eu falo hi ele diz isto:

19:42 Teste: Olá, Gustavo! O que o traz aqui?

Link para o comentário
Compartilhar em outros sites

  • 0

tenta

 

soh coloquei pras primeira 4 voc vlw

 

nome do seu npc.xml

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Nome do seu npc" script="nome do seu script.lua" walkinterval="2000" floorchange="0">
<health now="100" max="100"/>
<look type="133" head="114" body="119" legs="132" feet="114"/>
</npc>

 

 

 

nome do seu script.lua

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

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

function creatureSayCallback(cid, type, msg)
if(not npcHandler:isFocused(cid)) then
return false
end

local talkUser = NPCHANDLER_CONVbehavior == CONVERSATION_DEFAULT and 0 or cid

local falas = {
[1] = { -- druid
hi = 'Hello, mage of the skies. blablabla {yes} ?',
yes = 'ok mage! kkkkk',
no = 'ok then mage',
bye = 'Good bye '.. getCreatureName(cid) ..'.'
},
[2] = { -- sorc
hi = 'Hello my forest enchanter blablabla {yes} ?',
yes = 'ok forest enchanter! kkkkk',
no = 'ok then forest gamp',
bye = 'Good bye '.. getCreatureName(cid) ..'.'
},
[3] = { -- paladin
hi = 'Hey! Super shooter blablabla {yes} ?',
yes = 'ok Super shooter! kkkkk',
no = 'ok then super shooter',
bye = 'Good bye '.. getCreatureName(cid) ..'.'
},
[4] = { -- knight
hi = 'Aye, guardian blablabla {yes} ?',
yes = 'ok guardian! kkkkk',
no = 'ok then gaydian',
bye = 'Good bye '.. getCreatureName(cid) ..'.'
}
}



if(msgcontains(msg, 'hi') or msgcontains(msg, 'HI')) then
if not falas[getPlayerVocation(cid)] then
selfSay('desculpe,não falo com você!', cid)
talkState[talkUser] = 0
npcHandler:releaseFocus(cid)
else
selfSay(falas[getPlayerVocation(cid)].hi, cid)
talkState[talkUser] = 1
end
elseif(msgcontains(msg, 'yes') and talkState[talkUser] == 1) then
selfSay(falas[getPlayerVocation(cid)].yes, cid)
talkState[talkUser] = 2
elseif msg == 'no' and talkState[talkUser] >= 1 then  
selfSay(falas[getPlayerVocation(cid)].no, cid)  
talkState[talkUser] = 0  
npcHandler:releaseFocus(cid)
elseif msg == 'bye' then  
selfSay(falas[getPlayerVocation(cid)].bye, cid)  
talkState[talkUser] = 0  
npcHandler:releaseFocus(cid)  
end
return TRUE
end

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

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

  • 0

@Vodkart

 

Teste o seu e mesma coisa...

Parece que sempre que voce diz estas palavras mestres (hi, bye) ele ja diz o que esta configurado nas libs, a menos que voce configure no xml o que e pra ele dizer ao dizer "hi" e "bye" so que pelo xml nao da pra criar uma fala pra cada vocaçao =/

Link para o comentário
Compartilhar em outros sites

  • 0

calma ae tenta assim:

 

nome do seu npc.xml

<?xml version="1.0" encoding="UTF-8"?>
<npc name="Nome do seu npc" script="nome do seu script.lua" walkinterval="2000" floorchange="0">
<health now="100" max="100"/>
<look type="133" head="114" body="119" legs="132" feet="114"/>
</npc>

 

 

 

nome do seu script.lua

dofile("data/npc/lib/npc-func.lua")
local focuses = {} -- do not change

function onCreatureSay(cid, type, msg)

local falas = {
[1] = { -- druid
hi = 'Hello, mage of the skies. blablabla {yes} ?',
yes = 'ok mage! kkkkk',
no = 'ok then mage',
bye = 'Good bye '.. getCreatureName(cid) ..'.'
},
[2] = { -- sorc
hi = 'Hello my forest enchanter blablabla {yes} ?',
yes = 'ok forest enchanter! kkkkk',
no = 'ok then forest gamp',
bye = 'Good bye '.. getCreatureName(cid) ..'.'
},
[3] = { -- paladin
hi = 'Hey! Super shooter blablabla {yes} ?',
yes = 'ok Super shooter! kkkkk',
no = 'ok then super shooter',
bye = 'Good bye '.. getCreatureName(cid) ..'.'
},
[4] = { -- knight
hi = 'Aye, guardian blablabla {yes} ?',
yes = 'ok guardian! kkkkk',
no = 'ok then gaydian',
bye = 'Good bye '.. getCreatureName(cid) ..'.'
}
}


local cid_Say = msg:lower()
  if ((cid_Say == "hi") and not (isFocused(cid, focuses))) then
	   if not falas[getPlayerVocation(cid)] then
	   selfSay('desculpe,não falo com você!', cid)
	   removeFocus(cid, focuses)
	   else
	   selfSay(falas[getPlayerVocation(cid)].hi, cid)
	   addFocus(cid, focuses)
	   selfFocus(cid)
	   talk_step = 1
	   end
  elseif ((cid_Say == "yes") and (talk_step == 1)) then
	   selfSay(falas[getPlayerVocation(cid)].yes, cid)
	   talk_step = 2
  elseif ((cid_Say == "no") and (isInArray({1,2}, talk_step))) then
	   selfSay(falas[getPlayerVocation(cid)].no, cid)
	   removeFocus(cid, focuses)
  elseif (cid_Say == "bye") then
	   selfSay(falas[getPlayerVocation(cid)].bye, cid)
	   removeFocus(cid, focuses)	  
  end
end

function onThink()
for _, focus in pairs(focuses) do
	if not isCreature(focus) then
	 removeFocus(focus, focuses)
         talk_step = 0
	else
	 local distance = getDistanceTo(focus) or 5
		if distance > 4 then
			selfSay("Hmpf!", focus)
			removeFocus(focus, focuses)
              talk_step = 0
		end
	end
end
setFocus(focuses)
end

 

 

crie um arquivo chamado "npc-func.lua" em "data/npc/lib" e poe isso

 


local focuses = {}
function isFocused(cid, t)
for i, v in pairs(t) do
	if(v == cid) then
		return true
	end
end
return false
end

function addFocus(cid, t)
if(not isFocused(cid, t)) then
	table.insert(t, cid)
end
end

function setFocus(t)
for i, v in pairs(t) do
	if(isPlayer(v)) then
		doNpcSetCreatureFocus(v)
		return
	end
end
doNpcSetCreatureFocus(0)
end

function removeFocus(cid, t)
for i, v in pairs(t) do
	if(v == cid) then
		table.remove(t, i)
		setFocus(focuses)
		break
	end
end
end

function onCreatureDisappear(cid)
if isFocused(cid, focuses) then
 removeFocus(cid, focuses)
	if isPlayer(cid) then
	 closeShopWindow(cid)
	end
end
end

 

lembrando q tirei essa base de script do LsM

 

tenta ae

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

  • 0

Acho que estamos quase la...

Agora quando eu disse hi, ele disse a mensagem correspondente a minha vocaçao...

Mas depois eu subi um andar e deci novamente, disse "yes" e ele disse a mensagem corresponde a quando o player diz yes..

Ou seja... Ele nao esta desfocando quando o player se afasta dele... Voce sabe arrumar?

Mas dequalquer forma... Levou meu rep+

Link para o comentário
Compartilhar em outros sites

  • 0

DEU CERTO ;D

Ainda nao testei direitinho... Mas qualquer coisa eu edito e posto aqui, mas parece que ta tudo OK...

 

Muito obrigado... Vc parece mandar muito bem em npcs heim, e quem e bom em npc, nunca e bom so em npc...

 

Vlw mesmo ;D

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

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...