Ir para conteúdo
Banner com Efeitos

adolfuu

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    adolfuu deu reputação a JhonatanCWest em Criando um NPC de missões, pra melhorar seu OT   
    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. 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!
  2. Gostei
    adolfuu deu reputação a Vodkart em [Items]/[movements] Problema em Amuleto   
    vc teria que usar attribute key="stopduration", porém iria precisar de outro item para isso,
    observe os anéis:


    <item id="2165" article="a" name="stealth ring"> <attribute key="weight" value="100" /> <attribute key="slotType" value="ring" /> <attribute key="transformEquipTo" value="2202" /> <attribute key="stopduration" value="1" /> <attribute key="showduration" value="1" /> </item> <item id="2202" article="a" name="stealth ring"> <attribute key="weight" value="100" /> <attribute key="slotType" value="ring" /> <attribute key="decayTo" value="0" /> <attribute key="transformDeEquipTo" value="2165" /> <attribute key="duration" value="600" /> <attribute key="showduration" value="1" /> <attribute key="invisible" value="1" /> </item>

    ao equipar/desequipar ele se transforma em outro, com funções diferentes!
    Um serve para brecar a duração xd

Informação Importante

Confirmação de Termo