Ekasus 0 Postado Janeiro 27, 2012 Share Postado Janeiro 27, 2012 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 More sharing options...
0 bepokemon 101 Postado Janeiro 27, 2012 Share Postado Janeiro 27, 2012 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 More sharing options...
0 Ekasus 0 Postado Janeiro 27, 2012 Autor Share Postado Janeiro 27, 2012 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 More sharing options...
0 Vodkart 1515 Postado Janeiro 27, 2012 Share Postado Janeiro 27, 2012 (editado) 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 Janeiro 27, 2012 por Vodkart Link para o comentário Compartilhar em outros sites More sharing options...
0 Ekasus 0 Postado Janeiro 28, 2012 Autor Share Postado Janeiro 28, 2012 @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 More sharing options...
0 Vodkart 1515 Postado Janeiro 28, 2012 Share Postado Janeiro 28, 2012 (editado) 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 Janeiro 28, 2012 por Vodkart Link para o comentário Compartilhar em outros sites More sharing options...
0 Ekasus 0 Postado Janeiro 28, 2012 Autor Share Postado Janeiro 28, 2012 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 More sharing options...
0 Vodkart 1515 Postado Janeiro 28, 2012 Share Postado Janeiro 28, 2012 blz tenta ali usar o npc agr modifiquei e vc coloco td na lib neh? Link para o comentário Compartilhar em outros sites More sharing options...
0 Ekasus 0 Postado Janeiro 28, 2012 Autor Share Postado Janeiro 28, 2012 (editado) 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 Janeiro 28, 2012 por Ekasus Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Ekasus 0
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