Postado Janeiro 13, 2012 13 anos Este é um post popular. Introdução: Primeiramente, vou explicar, a forma em que eu comecei aprender a criar npcs mais complexos, e digo uma coisa.. sozinho se você reparar bem nos detalhes, creio eu que você pode criar coisas impressionantes, utilizando da sua criatividade. Então, ando tentando me virar sozinho, sempre. Por isso, caso ajam functions que não precisam ser postas, quero que alguém que saiba mais que eu corrija-me por favor! O começo: Cansado, de não ser respondido, em um outro fórum, que hoje em dia já abandonei, eu fui atrás, de uma forma independente. Baixei vários Otservers, e comecei a prestar atenção em casa function declarada, cada situação. E como já estudei um pouco de PHP, e Javascript, tinha uma base da tal programação, que por fim é muito diferente, mas como toda programação, tem suas semelhanças. Então, primeiramente, notei no começo dos Scripts tais codes: 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 Certo, então como isso é um tutorial, eu acabei de lhe ensinar a primeira parte do script em si. Logo após, eu comecei a prestar muita atenção nos "do" que é o que "faz" uma ação. Então vou passar a vocês alguns "do" que eu lembro. doPlayerSetVocation(cid,iddavocation) // Adiciona uma vocação no player doPlayerAddItem(cid,iddoitem) // Adiciona um item no player doPlayerSetStorageValue(cid,storage,partedaquest) //Adiciona um storage ao player doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE,'message') //Manda uma mensagem em cor laranja no default doPlayerAddExperience(cid,experience) // Adiciona Experiência ao player playerLearnInstantSpell(cid, 'Nome da spell') // Não é "do" mas ensina a fazer uma magia doTeleportThing(cid,{x=xpostion,y=ypostion,z=zpostion}) //Teleporta o Player a um certo "local". http://tibiaking.com...de-funcoes-lua/ Uma lista de funções! Essas foram quais eu lembrei agora, devo ter esquecido MUITAS, mas enfim, conforme forem me lembrando, e eu for me lembrando, vou adicionando ao Tutorial. Ok, depois disso aprendi que um SelfSay('Faz a pessoa falar',cid). Com a gloriosa programação, ou com um inglês básico, você vai saber o que é "if" (se, caso..) ,else (senão). Com isso junto, você pode criar um "se player falar". Que se daria com esse código: if(msgcontains(msg, 'quest')) then selfSay('Você tem x quests, desejas saber alguma de {suas quests?}',cid) else selfSay('Isso não me interessa agora',cid) Aportugueisando ou Traduzindo pro que você entende: caso(contenha(mensagem, 'quest')) então diga('Você tem x quests, desejas saber alguma de {suas quests?}',cid) senão diga('Isso não me interessa agora',cid) Deu pra entender né? Então montando uma estrutura em português. Códigos essenciais Caso contenha a mensagem 'Jhonatan' o npc dará 100 de experiência, e adicionar um Storage pra ele não pegar +100 de experiência Fecha o código Isso vai ficar assim: 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 if(getPlayerStorageValue(cid,9005)==1) then selfSay('Você já fez essa quest',cid) else if(msgcontains(msg, 'Jhonatan') then selfSay('Olá Jhonatan, obrigado por fazer esse tutorial! Receba 100 de experiência por isso!',cid) doPlayerAddExperience(cid,100) doPlayerSetStorageValue(cid,9005,1) else selfSay('Seu lugar não é aqui.',cid) end end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) if(getPlayerStorageValue(cid,9005)==1) Isso eu não expliquei ainda, 'get' é igual a 'ter' na programação aqui. Então se ele ter a storage value 9005 == 1 (1 é o que a gente adicionou depois da Storage vejam) então ele vai dizer aquilo, se ele não ter essa storage.. ele vai continuar o código. end end end npcHandler:setCallback(CALLBACK_MESSAGE_DEFAULT, creatureSayCallback) npcHandler:addModule(FocusModule:new()) Tudo que se abre, se fecha, a cada 'If' dito, é um 'end' que tem que ser dado. E aquilo ali no final, sempre vai no final! Bom por enquanto é isso, vou ver se lembro mais alguma coisa pra por aqui.. Qualquer dúvida, só falar.. Se você gostou, olha, é algo que vai melhorar MUITO seu OT! Então, se puder dar +REP, eu gostaria muito! Abraços! Editado Janeiro 13, 2012 13 anos por JhonatanCWest (veja o histórico de edições)
Postado Janeiro 13, 2012 13 anos Opa, dei uma olhada no tutorial que você fez. Bem legal, vou ler melhor e qualquer coisa eu edito o post ou comento novamente. Parabéns, Reputado + ! -= PlayerLearnInstantSpell É doPlayerLearnInstantSpell tem do sim :> Editado Janeiro 13, 2012 13 anos por skydangerous (veja o histórico de edições)
Postado Janeiro 13, 2012 13 anos Opa muito bom o tutorial Só um comentário, esses "do" são funções e você pode ver a lista completa aqui http://tibiaking.com/forum/topic/1988-lista-de-funcoes-lua/ Abraços, e reputado!
Postado Janeiro 13, 2012 13 anos Autor Valeu, vou colocar esse link no tópico, porque nem eu sei todas essas funções! Renato, cada vez melhor esse fórum em, parabéns a todos que estão admnistrando! Respostas rápidas, e sempre com algo a dizer haha! Abraço a vocês!
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.