Ir para conteúdo

Funções Dos Scripts De Lua #6


Izaiasousa

Posts Recomendados

Funções dos scripts de Lua #6

By Sir. Lakinha Tariel :)

 



Olá pessoal!

Nós já vimos as funções, sintaxes, como e onde usar e etc.

Mas.. que tal a gente partir pra prática ?

Hoje eu irei mostrar scripts facéis e grandes só pra vocês compreenderem o raciocínio. Só quero que vocês prestem atenção aonde iremos usar cada função e sintaxe que aprendemos até agora!

 

 

Eu achei esse script aqui, grande mas que dá pra usar nossos conhecimentos.

 

Esse script faz o segunte:

Se você for de uma certa vocação, você ganha certo item. Entendem? Em nossos tutoriais anteriores vimos que podemos usar certas coisas né ? :)

 

Então vamos lá!

 

 

 

onUse

 



function onUse (cid, item, frompos, item2, topos) -- Começando o script com... function onUse né? Isso vai começar porquê ele vai dizer ao script que aqui é uma ação, como já comentamos no tutorial sobre ele.



local playervoc = getPlayerVocation(cid) -- local é o lugar aonde iremos declarar as variavéis. No caso playervoc vai receber quem ? Quem se lembra da aula de get? :p

 

if playervoc == 1 or playervoc == 5 then -- Temos 4 vocações no tibia né? A primeira é ... Sorcerer né ? E se ele for promovido ? 1+4 = 5. Então se playervoc == 1 ou playervoc == 5 então essa parte do script será executado.

 

if item.uid == 9000 then -- Bem.. se é uma ação ele vai ter que clicar em algo né ? Que tal um baú ? Mas tio .. no meu ot tem um montão de baú... como é que eu vou fazer pra ele dizer que é só um ? :cry: Simples, é pra isso que ser o Unique Id (uid). Você escolhe um número, mas ele tem que ser só ele entendem ? Id único. Quando vocês criam uma quest no mapa de vocês, vocês não colocam um item em ActionId né ? Embaixo do ActionId você apenas coloca seu Unique Id que será o mesmo no script. ^^

 

 



queststatus = getPlayerStorageValue(cid, 9000) -- Tio..>.< Como eu faço pro jogador só pegar uma vez!! Só uma!! Você adiciona o getPlayerStorageValue, que como eu disse o get serve para ler uma informação do jogador. Então digamos que o jogador foi em uma praça e lá tavão dando comida de graça. Imagina se todo mundo repetisse o prato ? Então digamos que ele recebe uma senha e não pode mais repetir. Digamos que quando ele comeu o prato ele recebe a senha 1 né ? Se ele não comeu ainda ele recebe a senha 1 ou 0. Aqui no caso a variável queststatus vai receber a informação do jogador cid e dizer ao script se ele "comeu" ou não.



if queststatus == -1 or queststatus == 0 then -- Aqui se o jogador ainda não clicou no baú. Pra isso usamos 1 ou 0. Isso significa que é nulo, certo ? :)

 

doPlayerSendTextMessage(cid, 22, "You have found a wand of inferno.") -- Aprendemos isso na aula de número 2, certo ? Aqui ele irá enviar uma mensagem do tipo 22 (cor branca) dizendo que ele achou uma Wand of Inferno. Nunca se esqueçam! A mensagem que vocês querem enviar deve ser escrita entre "aspas" para que o script entenda que a partir dali é um texto!

 

doPlayerAddItem(cid,2187,1) -- Agora ela vai adicionar 1 Wand of inferno (2187) ao jogador né ?

 

setPlayerStorageValue(cid, 9000, 1) -- Ará! Agora o jogador recebe a senha 1 que significa que ele já fez a quest. Set significa indicar, adicionar, entendem ? Depois irei fazer um tutorial sobre Storage Value para vocês entenderem melhor.

 

else -- Senão.. queststatus for 1 então ..

 

doPlayerSendTextMessage(cid,22,"You already did this quest.") -- O jogador vai receber a mensagem que You already did this quest, que significa que você já fez esssa quest ! :p

 

end

else

return 0 -- Isso aqui significa para retornar o script se o queststatus for igual a -1 ou 0. Como eu quero que o queststatus seja igual a -1 ou 0 então eu não vou retornar o script, certo ?

end

return 1

end

 

 

if playervoc == 2 or playervoc == 6 then -- A mesma coisa que a outra parte do script, só que essa aqui agora começa com ... Druid e Elder Druid.

 

if item.uid == 9000 then -- A mesma coisa do sorcerer. Como eu disse no começo, só o que vai mudar é a vocação e o item. Somente isto. O resto continua igual.

 

queststatus = getPlayerStorageValue(cid, 9000) -- A storage do jogador. Vai ler a informação sobre o jogador e retornar ao script.

 

if queststatus == -1 or queststatus == 0 then -- Se for igual a -1 e 0 então o script será executado.

 

doPlayerSendTextMessage(cid, 22, "You have found a hailstorm rod.") -- Envia a mensagem "You have found a hailstorm rod."

 

doPlayerAddItem(cid,2183,1) -- Adiciona 1 hailstorm rod.

 

setPlayerStorageValue(cid, 9000, 1) -- E adiciona uma storage ao jogador. Assim quando ele for clicar no baú da quest, por exemplo, quando queststatus ler as informações sobre o jogador e retornar ao script ele irá dizer que ele já fez a quest.

 



else

 

doPlayerSendTextMessage(cid,22,"You already did this quest.") -- Aqui a mesma coisa que nos outros.

end

else

return 0

end

return 1

end

 

if playervoc == 3 or playervoc == 7 then -- Vai ver se é paladin ou royal paladin aqui. Continuo dizendo, é a mesma coisa só muda a vocação e o item.

 

if item.uid == 9000 then

queststatus = getPlayerStorageValue(cid, 9000)

if queststatus == -1 or queststatus == 0 then

doPlayerSendTextMessage(cid, 22, "You have found 100 infernal bolts.") -- O item do paladin ou royal paladin, que deve ser diferente das outras. :p Por isso que é uma quest das vocações.

doPlayerAddItem(cid,6529,100)

setPlayerStorageValue(cid, 9000, 1) --Storage Value

else

doPlayerSendTextMessage(cid,22,"You already did this quest.")

else

return 0

end

return 1

end

 

if playervoc == 4 or playervoc == 8 then -- Agora verifica se é um Knight ou Elite Knight...

if item.uid == 9000 then

queststatus = getPlayerStorageValue(cid, 9000)

if queststatus == -1 or queststatus == 0 then

doPlayerSendTextMessage(cid, 22, "You have found a demon shield.") -- E ele recebera seu item. ;)

doPlayerAddItem(cid,2520,1)

setPlayerStorageValue(cid, 9000, 1)

else

doPlayerSendTextMessage(cid,22,"You already did this quest.")

end

else

return 0

end

return 1

end

 

end







 

Um script simples né? Porém útil se você quiser fazer quests como Desert Quest, servindo de base para outras quests, como a PoI que tem uma parte que tem 4 portas, e só jogador cid getPlayerVocation(cid) >=5 and <=8.

 

 

 

onStepIn

 

Agora vamos à um script de Movement! onStepIn

Eu achei esse script e resolvi explicar aqui como ele serve. Quando você pisar em cima de um piso (tile) vai aparecer a mensagem Ui! Que frio e o jogador irá mudar de outfit.

 

 

local mulher = {lookType = 252, lookHead = 79, lookBody = 91, lookLegs = 91, lookFeet = 91, lookTypeEx = 0, lookAddons = 3} -- Local é o lugar onde se declara as variavéis, se lembram ? Aqui a variavel mulher vai receber essa roupa quando pisar em cima do piso.Para quem não sabe, Looktype é o outfit que o jogador vai usar, no caso o outfit de roupa de frio que me esqueci o nome. ;)

 



local homem = {lookType = 251, lookHead = 86, lookBody = 86, lookLegs = 86, lookFeet = 86, lookTypeEx = 0, lookAddons = 3} -- Aqui é o outfit de homem, male.

 

 

function onStepIn(cid, item, pos) -- Função de Movimento, onStepIn, como já estudamos para quê ela serve né?

 

if isPlayer(cid) and item.id == 6967 andgetPlayerSex(cid) == 0 then -- Aqui é uma condição. Se lembram da aula de Is? Se você está vendo aqui e não sabe o que estou fazendo, aconselho a ler os tutoriais do início. É jogador? É mulher 0 ? Se o piso for o de id 6967 [Abra seu mapa editor pra escolher o qual você quer].. Então o script será executado.

 

doCreatureChangeOutfit(cid, mulher) -- O jogador mudará o outfit para o escolhido.

 

doSendAnimatedText(getPlayerPosition(cid),"Que Frio!",math.random (1,255)) -- Vai enviar uma mensagem para o jogador, onde ele vai pegar a posição do jogador getPlayerPosition(cid) e enviar a mensagem Que frio! ** O math.random significa digamos.. um sorteio de números entre 1 e 255. Entre 1 e 255 temos as cores da mensagem. Ou seja, a cor da mensagem vai ser aleatória, entre 1 e 255.

 

else -- Senão for Mulher 0 então..

 

if isPlayer(cid) and item.id == 6967 and getPlayerSex(cid) > 0 then -- Se o sexo for maior que 0, 1 é homem, 2 parece que é Gm e tals.. então..

 

doCreatureChangeOutfit(cid, homem) -- Vai mudar o outfit do jogador para o escolhido na variavel homem. doSendAnimatedText(getPlayerPosition(cid),"Que Frio!",math.random (1,255)) -- Vai enviar a mensagem na posição do jogador Que Frio!

 

end

end

 

return TRUE -- O script será executado novamente ? Sim! Porquê?! Por que se o jogador pisar encima do tile ele irá aparecer isso novamente.

end

 

 

 

Bem pessoal, quis mostrar esses dois scripts que são simples, mas interessantes e úteis ate. Baseado no que já aprendemos em nossas aulas e ainda iremos ver outras coisas, como aplicação dessas funções em outros scripts.. criar magia .. criar npc.. monstros e etc. São chatos, eu sei, mas criar um diferente vale a pena.

 

Bem pessoal, aqui acaba mais uma Funções dos Scripts de Lua com o oferecimento de

 

Laka Tariel Ot Serv :w00t:

 

Até a próxima e bons estudos!

Editado por LakaTarielOtServ
Link para o comentário
Compartilhar em outros sites

Voce podia ensinar em vez de usar:

if playervoc == 1 or playervoc == 5 then

 

Usar isso aqui:

isInArray({1,5}, getPlayerVocation(cid)

 

E isso aqui eh desnescessario:

if queststatus == -1 or queststatus == 0 then 

 

Quando voce pode usar isso:

if queststatus <= 0 then

Link para o comentário
Compartilhar em outros sites

Voce podia ensinar em vez de usar:

if playervoc == 1 or playervoc == 5 then

 

Usar isso aqui:

isInArray({1,5}, getPlayerVocation(cid)

 

E isso aqui eh desnescessario:

if queststatus == -1 or queststatus == 0 then 

 

Quando voce pode usar isso:

if queststatus <= 0 then

 

O isInArray senão me engano não expliquei ainda na minha aula de Is. Talvez eu edite lá mais tarde.

 

Em relação ao

 

if queststatus == -1 or queststatus == 0 then 

 

Eu quis mostrar aos iniciantes que algumas vezes eles vão se deparar com um -1 ou um 0 e para que eles não se confudissem eu coloquei os dois.

Link para o comentário
Compartilhar em outros sites

  • 3 months later...

muito bom o tuto mas tipo...

nao consigo entender esse esquema dos elses,ends,returns do jeito q ta ai

eu consigo fazer os scripts funcionarem na cagada

pq nao consigo entender o end else e return do fim de cada funçao

tem como explicar?

vlws

Link para o comentário
Compartilhar em outros sites

  • 2 months later...
  • 1 year later...
×
×
  • Criar Novo...