Ir para conteúdo

Featured Replies

Postado

Olá galera blz?

 

Então estou com um problema nessa script, estou tentando aprender .lua mas esta tenso, comecei a criar esse NPC e está dando erro interface, provavelmente é o uso errado da função getCreatureName, alguém poderia me dizer o jeito correto de colocar na script.

Obs: Estou a procura de um professor de .lua focado em NPC, se alguém quiser adotar um pupilo chama no PV 
:e3e03d5a3092be979f60f558c1d84f09:
 

Spoiler

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
if getCreatureName(cid) == nome then

	if msgcontains(msg, 'Oi') or msgcontains(msg, 'Ola') and talkState[talkUser] == 1 then
		selfSay("Olá, como está ".. nome ..",faz tempo que não aparece por aqui... Em que posso lhe ajudar?",cid)
		talkState[talkUser] = 1
	  end
end
end

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

 


Desde já Grato!!

  • Respostas 13
  • Visualizações 1.2k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • A função retorna uma string, ou seja, um texto. Para fazer essa comparação corretamente, o nome a ser comparado também tem que ser uma string. local keywordHandler = KeywordHandler:new() local npc

  • local keywordHandler = KeywordHandler:new() local npcHandler = NpcHandler:new(keywordHandler) NpcSystem.parseParameters(npcHandler) local talkState = {} function onCreatureAppear(cid) npcHandler:onCre

  • @peterson18 está quase, faltou remover o if desnecessário   acredito que a versão correta do script seria assim:   local keywordHandler = KeywordHandler:new() local npcHandler = Npc

Postado

A função retorna uma string, ou seja, um texto. Para fazer essa comparação corretamente, o nome a ser comparado também tem que ser uma string.

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 nome = "nome"
if getCreatureName(cid) == nome then

	if msgcontains(msg, 'Oi') or msgcontains(msg, 'Ola') and talkState[talkUser] == 1 then
		selfSay("Olá, como está ".. nome ..",faz tempo que não aparece por aqui... Em que posso lhe ajudar?",cid)
		talkState[talkUser] = 1
	  end
end
end

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

 

 

 

 

Nós somos aquilo que fazemos repetidamente. Excelência, não é um modo de agir, mas um hábito.

                                                                                                                                                                                                                                        Aristóteles 

Postado
  • Autor
14 minutos atrás, Way20 disse:

A função retorna uma string, ou seja, um texto. Para fazer essa comparação corretamente, o nome a ser comparado também tem que ser uma string.


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 nome = "nome"
if getCreatureName(cid) == nome then

	if msgcontains(msg, 'Oi') or msgcontains(msg, 'Ola') and talkState[talkUser] == 1 then
		selfSay("Olá, como está ".. nome ..",faz tempo que não aparece por aqui... Em que posso lhe ajudar?",cid)
		talkState[talkUser] = 1
	  end
end
end

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

 


Exato, que vacilo :7943e5822524b7fb194f46d626fb2fb7:
 

Ficou assim:

Spoiler

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 config = {
	  nome = getCreatureName(cid),
	}
if nome == getCreatureName(cid)  then

	elseif msgcontains(msg, "blz") or msgcontains(msg, "blzz") and talkState[talkUser] == 1 then
		selfSay("Olá, como está ".. config.nome ..", faz tempo que não aparece por aqui... Em que posso lhe ajudar?",cid)
		talkState[talkUser] = 1
		return true
	  end
end


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

 

 

Tem alguma dica ou outra forma de funcionar ou assim esta bom?

Desde já grato!

Postado

E ai cara, tudo certo?

 

Lendo o seu código, percebo que talvez você esteja cometendo um pequeno erro de lógica, e alguns erros de semântica.

1- erros de semântica

Citar

local config = {
	  nome = getCreatureName(cid),
	}

não há necessidade de colocar a sua variável em um objeto.

 

como você está apenas declarando a variável nome, ela pode ser acessada diretamente, ou seja, essas linhas poderiam se resumir em:

local nome = getCreatureName(cid)

 

Citar

if nome == getCreatureName(cid)  then

nesse contexto, a variável nome não existe, pois você criou ela dentro do objeto config, então ficaria config.nome

 

2- erro de lógica

Citar

if nome == getCreatureName(cid)  then

por que você está comparando a variável nome com o nome da criatura? Você já declarou a variável nome com o nome da criatura nas linhas anteriores

dessa forma, acredito que esse if é desnecessário, e você pode remover.

 

 

Citar

elseif msgcontains(msg, "blz") or msgcontains(msg, "blzz") and talkState[talkUser] == 1 then

quando remover o if anterior, altere essa linha removendo o elseif e colocando um if no lugar, dessa forma:

if msgcontains(msg, "blz") or msgcontains(msg, "blzz") and talkState[talkUser] == 1 then

 

Citar

selfSay("Olá, como está ".. config.nome ..", faz tempo que não aparece por aqui... Em que posso lhe ajudar?",cid)

aqui você remove o config.nome e deixa apenas nome

 

Postado
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 nome = "nome"

if nome == getCreatureName(cid)  then
	if (msgcontains(msg, "blz") or msgcontains(msg, "blzz")) and (talkState[talkUser]) == 1 then -- Você vai precisar dos () para separar o 'or' do 'and', caso contrário sua condição ia bugar.
		selfSay("Olá, como está ".. nome ..", faz tempo que não aparece por aqui... Em que posso lhe ajudar?",cid)
		talkState[talkUser] = 1 -- Altere aqui, pois a talkState já está 1, de acordo com sua condição.
		end
  	 end
  return true
end


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


 

Editado por Skydrowz (veja o histórico de edições)

Master yourself, master the enemy.

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Conteúdo Similar

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo