noobinhu 38 Postado Fevereiro 8, 2008 Share Postado Fevereiro 8, 2008 (editado) Olá, meu primeiro tutorial Vou ensinar a fazer actions, somente actions, em um próximo tuto irei ensinar talk, movements e npcs, todos práticos ... Índice: 1. O Ínicio 2. Exemplos de ações feitas 3. If e Elseifs 4. Continuado os exemplos 5. Exemplos mais difíceis 6. Exercícios de treino 7. Respostas dos exercícios 8. Tutoriais indicados 1. O Ínicio Não aprenda detalhes, aprenda fazer! Então vamos lá, primeira coisa: QUERO FAZER UMA ACTION!! Legal, sempre é assim que começa, você quer fazer, mas que estilo de action você quer fazer? Vamos por etapas... QUALQUER ACTION que você for fazer, seja de quest, de leveldoor, de piscar luzinha, de virar um ET, de sumonar um vira-lata, tem que começar com essa tag: function onUse(cid, item, frompos, item2, topos) e logo após para finalizar esta tag usamos: end ficando assim: function onUse(cid, item, frompos, item2, topos) end Certo, pelo que eu entendi em todas minhas actions, movements etc, essa tag determina 3 coisas, QUEM executa a ação, COMO e ONDE no caso: CID = Você executando a ação item, item2 = Como executar a ação frompos, topos = posições ONDE ocorre a ação Feito isso, iremos classificar essas partes: function onUse(cid, item, frompos, item2, topos) -- linhas em branco entre a function end Galera, essas classificações foi eu que inventei, nunca vi nada parecido, só to criando para ajuda-los entender... TAGS - CLASSIFICAÇÃO - ENTENDIMENTO Azul - Definido - Toda e qualquer action deve possuir essa tag Vermelho - Indefinido - Onde todas ações devem ficar, por isso se chama 'Indefinido', sempre muda (ou quase sempre) Pronto, você já tem a base de seu script, agora temos que pensar, que script queremos fazer? Nos exemplos eu irei demonstrar, diversas ações... 2. Exemplos de ações feitas: Ação de quest: if item.itemid == <id do bau, pedra, etc> and item.uid == 9001 then quest = getPlayerStorageValue(cid,9001) if quest == -1 or quest == 0 then doPlayerSendTextMessage(cid,22,"<msg>") doPlayerAddItem(cid,<itemid>,1) setPlayerStorageValue(cid,9001,1) else doPlayerSendTextMessage(cid,22,"The chest is empty.") end end Explicação: Leitura: SE o item de id = <id do bau, pedra, etc> Acho que nem precisa explicar né ;x Leitura: E Explicação porque ressaltei o 'and': eu ressaltei porque, pra quem não tem entendimento de inglês, sempre terá erros nisso, confundindo o 'and' com o 'or', no caso se fosse or, a ação da action seria para todos os item.itemid determinados e todos item.uid determinados e não para os 2 juntos :] Leitura: o unique do item usado for = <id determinado> Explicação, também acho que não é necessário Leitura: então Explicação, depois de todas as condições selecionadas você coloca o then para dizer 'agora podem vir as ações ' Leitura, quest = pegaStorageValue(criatura,9001(número do storage value)) SE quest == -1 ou quest == 0 (não tiver sido feito) então... Esta parte indica se o player ja fez ou não a quest. Ações que aconteceriam depois SE todas as condições forem verdadeiras Ações: mandar a message que estivesse escrito entre as virgulas onde está '<msg>' adcionar um item ao player de itemid determinado adcionar storage value determinado, no caso 9001 para 1. Ou seja, estava 0 ou -1 e agora virou 1, ou seja, o player ainda n tinha feito e agora com esta tag, determina que ele já fez e nunca mais pegará este item denovo enquanto estiver com a storage value 9001 determinada 1 Leitura: Caso contrário, manda mensagem para o player <msg> e fecha o if do quest (storage value) NOTA: Para cada IF, tem de ter um end... vou explicar melhor isso agora: 3. If e Elseifs: Um caso para policias xD Sério mesmo, pra aprender e dominar esses 2 tem que ter muito treino, eu por exemplo, divez em quando ainda tenho dúvidas, é sempre bom relembrar em alguns tutoriais... Certo, a regra básica, cada IF tem um END, exemplo: if item.itemid == 2506 thenif item.uid == 2506 then quest = getPlayerStorageValue(cid,9001) if quest == -1 or quest == 0 then end end end Senão me engano é esta ordem, de trás para frente, olhem as posições de cada um dos ends e ifs, isso é muito bom aprender bem, pra quando você for fazer um else não ficar perdido :] Tá, essa eu já entendi, mas e quando tem elseif? Quando tem elseif, é muito fácil, olhe só: if item.itemid == 2506 thenif item.uid == 2506 then quest = getPlayerStorageValue(cid,9001) if quest == -1 then elseif quest == 0 then end end end O elseif, é mais uma forma de não colocar muitos ends, amanhã farei o teste, mas tenho quase certeza, sempre antes de usar um elseif, tem que ter um if, olhem esse exemplo agora com um else, como ficaria: if item.itemid == 2506 thenif item.uid == 2506 then quest = getPlayerStorageValue(cid,9001) if quest == -1 then elseif quest == 0 then else -- as ações aqui encontradas seriam validas tanto para o IF quanto para o elseif :] end end end Essa parte, de ifs e elseifs acho que acabou, qualquer dúvida poste aqui, é muito complicadinha essa parte ;P 4. Continuado os exemplos então... Mudando de Templo (masterpos): if item.itemid == <id de uma estátua, pedra, o que quiser> and item.actionid == <id da actionid> then newmasterpos = {x=158752, y=56872, z=2658} doPlayerSetMasterPos(cid,newmasterpos) doTeleportThing(cid,newmasterpos) end Item da actionid == <id> Simplesmente, mesma coisa do que os outros item, unique etc primeiro indicamos, uma posição e depois, adcionamos ao player (cid) esta posição como templo Teleportamos o player (cid) para o lugar determinado Tendo noção de como fazer uma nova runa, no caso a clássica Mana Rune: if item.itemid == <id da mana rune> thendoPlayerAddMana(cid,+9000) end Adciona mana ao player, no caso +100 de mana :], se fosse retirar colocaria -100 -50 -300 e assim por diante Tá, dae se fala, mas pow, essa runa nunca acaba, não tem exhaust, não tem limite de lvl, não tem nada, só adciona mana, tá muito apelona... E eu te respondo: "Será o seu desafio, fazer tudo isso que você falou " E para os espertinhos, o resultado dela feita irá estar daqui a alguns dias no final do tópico em um spoil. 5. Exemplos mais difíceis: Uma quest meio tosca, possível sword of fury quest by me: if item.uid == 30001 thenelseif getPlayerLevel(cid) == 1 then elseif getPlayerHealth(cid) == 1 then elseif getPlayerFood(cid) == 0 then elseif getPlayerAccess(cid) == 0 then fist = getPlayerSkill(cid,0) club = getPlayerSkill(cid,1) sword = getPlayerSkill(cid,2) axe = getPlayerSkill(cid,3) elseif fist > club then elseif fist > sword then elseif fist > axe then sworfoffury = getPlayerStorageValue(cid,30001) if swordoffury == -1 or swordoffury == 0 then doPlayerSendTextMessage(cid,22,"You have found the sword of fury.") doPlayerSendTextMessage(cid,22,"Congratulations!") doPlayerAddItem(cid,<sword of valor item id>,1) setPlayerStorageValue(cid,30001,1) else doPlayerSendCancel(cid,"You already did it.") end else doPlayerSendCancel(cid,"Only the humble can do it.") end Tá fico meio tosca, mas deu pra mostrar grande parte dos comandos e dar uma noção melhor ^.- Explicações: Leitura: Se o level for == 1 então... Leitura: Se o seu hp for == 1 então ... Leitura: Se você não tiver mais efeito de foods então... Leitura: Se o seu acesso for 0, ou seja, um player ... Determinando todas skills, para fazer as comparações... Leitura: Se o fist skill for maior do que todas skills melee então... Aqui só tem uma coisa nova, que é o doPlayerSendCancel, é estilo uma mensagem, mas aparece em cima do default, em branco. Ídem a última explicação :} Último exemplo, script de uma door, normal... e depois umas modificações na mesma ... Door normal: if item.itemid == <id da porta fechada> then doTransformItem(item.uid,item.itemid-1) end if item.itemid == <id da porta aberta> then doTransformItem(item.uid,item.itemid+1) end Explicações: Neste script só temos essa tag diferente, o que ela faz, do geito que foi estruturada ela iria pegar o número do id do item iria subtrair a 1 e transformar a porta no item do resultado da subtração... no caso ali teria que editar pro id certo de uma porta aberta Mesma coisa, mas aqui é uma SOMA, ou seja, o item que for resultado na soma será o item que será re-colocado no lugar da porta Agora algumas modificações, nesta porta: Voc door: if item.itemid == <id da porta fechada> thenif getPlayerVocation(cid) == 1 or getPlayerVocation(cid) == 2 or getPlayerVocation(cid) == 5 or getPlayerVocation(cid) == 6 then doTransformItem(item.uid,item.itemid-1) else doPlayerSendCancel(cid,"Only sorcerers and druids can enter this door.") end end if item.itemid == <id da porta aberta> then doTransformItem(item.uid,item.itemid+1) end Só essa nova tag, ela checa a vocação do player, no caso, se o player fosse voc 1, 2, 5 ou 6, ele conseguiria abrir, caso contrário não... Vocês devem ter percebido que esta não é uma porta adequada para o caso, porque depois qualquer um passaria nela, nos próximos tutoriais iremos aprender fazer umas coisinhas mais legais com isso ^.- Guild Door... if item.itemid == <id da porta fechada> thenif getPlayerGuildId(cid) > 0 then doTransformItem(item.uid,item.itemid-1) else doPlayerSendCancel(cid,"Only guild members can enter this door.") end end if item.itemid == <id da porta aberta> then doTransformItem(item.uid,item.itemid+1) end Checa se o player é ou não de uma guild, sendo 0 para pessoas sem guild ... PS: Denovo só essa action não seria a ideal para colcoar a um server, pois só um player de guild poderá abrir a porta, porém... todos poderam passar se ela estiver aberta. 6. Exercícios de treino: Vou passar alguns exercícios bons para treinar tudo isso, que você acabou de ler: 1. Faça a continuação daquela mana rune, visitem outros tópicos para ter mais informações e etc... ai vai o script inicial: if item.itemid == <id da mana rune> thendoPlayerAddMana(cid,+9000) end Restrições: Adcionará 200 de mana; Terá exhaust; Adciona um efeito mágico; Adciona uma mensagem. PS: Sistema de exhaust by colex: Adcione isto em data ~> actions ~> lib ~> actions.lua function getPlayerExhaust(player,number,time) now = os.time() before = getPlayerStorageValue(player,number) exhaust = os.difftime(now,before) if before == -1 then setPlayerStorageValue(player,number,now) return -1 else if exhaust >= time then setPlayerStorageValue(player,number,now) return -1 else return 1 end end end Exemplo de action, com ele: tempo = 1numero = 1540 if getPlayerExhaust(cid,numero,tempo) == -1 then -- ações end Neste exemplo terás 1 segundo de exhaust. Exercício 2. Construa um sistema de mining. Restrições: Terá que usar o item2.itemid O item.itemid tem de ser um machado O item2.itemid tem de ser pedras, rochas... Terá que ter 3 tipos de loots... E ser baseado em skill... Exercício 3. Faça uma quest. Restrições: Terá que usar storage values... Cada voc, 2 chances de loots... Level mínimo... Acabou os exercícios... 7. Respostas dos exercícios: Semana que vem, eu adciono, safadinho 8. Tutoriais indicados: Tutorial Sobre Actions Link do Tutorial Caso houver alguma dúvida sobre os exercícios, ou tenham idéias para novos exercícios podem postar aqui... :} Créditos: Yunie ~~ //Yunie~ Editado Fevereiro 9, 2008 por noobinhu Link para o comentário https://xtibia.com/forum/topic/76627-actionstutorial-pr%C3%A1tico/ Compartilhar em outros sites More sharing options...
teres 0 Postado Fevereiro 8, 2008 Share Postado Fevereiro 8, 2008 Ta bem legal ate q é dificil fazer tuto sobre actions .. Naum sou dessa aera por isso naum possu afirmar c esta perfeito mas.. Pelo q sei ta Tudo rox =P Link para o comentário https://xtibia.com/forum/topic/76627-actionstutorial-pr%C3%A1tico/#findComment-476977 Compartilhar em outros sites More sharing options...
Addict 12 Postado Fevereiro 9, 2008 Share Postado Fevereiro 9, 2008 Movido para seção correta. Link para o comentário https://xtibia.com/forum/topic/76627-actionstutorial-pr%C3%A1tico/#findComment-477022 Compartilhar em outros sites More sharing options...
matheusbm 0 Postado Fevereiro 9, 2008 Share Postado Fevereiro 9, 2008 Fiko legal me ajudo tb parabens Link para o comentário https://xtibia.com/forum/topic/76627-actionstutorial-pr%C3%A1tico/#findComment-477035 Compartilhar em outros sites More sharing options...
noobinhu 38 Postado Fevereiro 9, 2008 Autor Share Postado Fevereiro 9, 2008 Canso pra escrever tudo isso, umas 5h escrevendo xD Valeu pelos comments, antes mesmo deu acabar ... Link para o comentário https://xtibia.com/forum/topic/76627-actionstutorial-pr%C3%A1tico/#findComment-477187 Compartilhar em outros sites More sharing options...
Lordice 0 Postado Fevereiro 9, 2008 Share Postado Fevereiro 9, 2008 Ficou muito bem detalhado, bem explicado; ate um spriter/mapper como eu pode se tornar profissional estudando um tuto destes Link para o comentário https://xtibia.com/forum/topic/76627-actionstutorial-pr%C3%A1tico/#findComment-477376 Compartilhar em outros sites More sharing options...
GM Volcano 1 Postado Fevereiro 9, 2008 Share Postado Fevereiro 9, 2008 Nice Work! =] Onde posto a resposta dos exercícios?? xD Link para o comentário https://xtibia.com/forum/topic/76627-actionstutorial-pr%C3%A1tico/#findComment-477379 Compartilhar em outros sites More sharing options...
matheusbm 0 Postado Fevereiro 9, 2008 Share Postado Fevereiro 9, 2008 fiko legal Xd!! Link para o comentário https://xtibia.com/forum/topic/76627-actionstutorial-pr%C3%A1tico/#findComment-477385 Compartilhar em outros sites More sharing options...
noobinhu 38 Postado Fevereiro 9, 2008 Autor Share Postado Fevereiro 9, 2008 Vou postar semana que vem, pra ter tempo de fazer quem quiser... Link para o comentário https://xtibia.com/forum/topic/76627-actionstutorial-pr%C3%A1tico/#findComment-477396 Compartilhar em outros sites More sharing options...
Felipets 0 Postado Fevereiro 9, 2008 Share Postado Fevereiro 9, 2008 Caro mto bom da pra ajudar mtas pessoas Link para o comentário https://xtibia.com/forum/topic/76627-actionstutorial-pr%C3%A1tico/#findComment-477499 Compartilhar em outros sites More sharing options...
Pedretz 0 Postado Fevereiro 9, 2008 Share Postado Fevereiro 9, 2008 Muito bom mesmo o tutorial! Só evite usar cores claras como o amarelo. Abraços. Link para o comentário https://xtibia.com/forum/topic/76627-actionstutorial-pr%C3%A1tico/#findComment-477518 Compartilhar em outros sites More sharing options...
noobinhu 38 Postado Fevereiro 9, 2008 Autor Share Postado Fevereiro 9, 2008 É eu sabia, mas tem que usar cores que são visivelmente diferentes e eu já tinha suado todas, caso não consiga ler é melhor selecionar as partes claras e ler normal :} ou colar em um editor de texto... Link para o comentário https://xtibia.com/forum/topic/76627-actionstutorial-pr%C3%A1tico/#findComment-477529 Compartilhar em outros sites More sharing options...
Posts Recomendados