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?![]()
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 ?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 !
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.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!