Postado Junho 8, 2018 6 anos 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 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!!
Postado Junho 8, 2018 6 anos 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 Junho 8, 2018 6 anos 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 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 Junho 9, 2018 6 anos 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 Junho 9, 2018 6 anos 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 Junho 9, 2018 6 anos 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.