Histórico de Curtidas
-
VictorFT recebeu reputação de neverdiiee em Haunted TreelingsCave bem editada , feita por Blez e Neon.
Fotos:
Client Version: 9.60
Credits: Remere, Blez, Neon.
Download Link: Haunted Treelings.otbm - Speedy Share - upload your files here
-
VictorFT recebeu reputação de Shirushi1 em [Básico] Aprendendo Script---Tutorial by Leo ---
Bom galera, venho através desse tutorial tentar ajudar aqueles que querem aprender um pouco mais sobre a área de scripting. Vai ser bem básico, como muita gente tinha me pedido por pm (então resolvi fazer para acabar com o enjoo =P). Acredito que existam muitos tutoriais, alguns bons, outros não, e como vinham me pedindo, ou os tutoriais eram ruins, ou queriam uma visão de outra pessoa (quem sabe com outra pessoa falando, entenda melhor). Diante mão, vou logo dizendo que não me considero um bom scripter ou coisa perto disso até porque estou nisso há menos de 1 mês, mas vou tentar ajudar as pessoas com o pouco que sei.
Nessa primeira parte, vamos ver os seguintes pontos:
1. [LÓGICA DE PROGRAMAÇÃO]
1.1 O que é um algoritmo?
1.2 Um exemplo de algoritmo.
1.3 Exercício: Faça seu próprio algoritmo.
1. Desde que existe o ser humano, existe programação. Quando os homens da pré-história iam caçar, ele se programavam, decidiam quais passos tinham que seguir a fim de alcançar a caça. (hehe) Com o computador não é diferente, você deve dar os passos para que ele possa executar as ações e alcançar o objetivo, que no nosso caso, é o sucesso do script. Isso é a linguagem de programação, é uma linguagem criada para instruir o computador a realizar suas tarefas, e o programador deve seguir uma lógica para colocar cada parte do script no seu devido local, essa é a lógica de programação.
1.1 Algoritmo é nada mais que uma "receita" que deve ter os passos seguidos pelo computador para realizar uma tarefa. Esses passos não devem deixar o computador com dúvidas, e portanto, devem ser bem definidos e claros.
1.2 Vamos a um exemplo de um algoritmo. Algoritmo: Preparar um cafezinho
Geralmente, tomamos um cafezinho logo quando acordamos então a primeira coisa que devemos fazer é:
Acordar
Se não tiver água quente então
Colocar água na panela
Colocar a panela no fogão
Ligar o fogão
Esperar água ferver
Vejam que se esses passos acima forem seguidos rigorosamente, você vai conseguir por a água para ferver. Continuando...
Mas se já tiver água quente então
Botar água na xícara
Botar duas colheres de açúcar
Botar uma colher de café em pó
Mexer
Tomar
Dizer: Delíiiciaa =P
Vejam, que aí estão os passos exatos para preparar um cafezinho. Aliás, mais do que preparar, até tomar o café.
Como ficou o algoritmo:
1.3 Faça um algoritmo para: Ir à escola/faculdade (não precisa postar, é só para treinar).
2. [sCRIPTEANDO]
2.1 Arquivos de Base
2.2 Controladores Lógicos
- Condicionais
- Operadores de relação
- Operadores-controladores
2.3 Variáveis
2.4 Storage
Nessa parte, vamos começar a parte de script realmente. Lembrando que existem muitos tutoriais e só esse aqui não é o bastante, até por estar bem básico.
2.1 Os arquivos que podem dar auxílio na hora de fazer os seus scripts são:
-- Em data/lib (alguns, global.lua) encontre o arquivo: 000-constant.lua que dá muitas informações sobre o server, como por exemplo, id dos channels, id das skulls, tipos de mensagens, etc.. é bastante útil na construção dos scripts.
-- Ot script Live by Colex: Programa que facilita bastante pros iniciantes. Ele marca algumas funções em uma cor diferente além de executar o script para ver se há algum erro de escrita. Em alguns fórums tem, é só usar o sistema de busca.
-- Notepad++: Um editor de texto que também pode ser útil.
2.2 Os controladores lógicos são aqueles que colocarão em prática a sua lógica de programação. São eles que guiarão os passos que o computador deve seguir.
--- Condicionais
Acho que todos sabem o que é um condicional. Como o nome já diz, ele abre uma condição para que algo possa ser feito.
Exemplo: Caso não chova, irei jogar bola.
Então, isso é uma condição, a condição de que não esteja chuvendo. Se não chover eu jogo, se chover não jogo.
Na programação, os principais condicionais são:
if -- equivale ao se em português. Está presente em todas linguagens de programação. Provavelmente, você já o viu nas aulas de português. Ele abre uma condição. Regra: Todo if tem seu end.
else -- equivale ao senão. Vai ser executado caso a primeira condição aberta pelo if seja falsa.
elseif -- equivale a "senão se" ou "mas se". Ele evita a repetição de vários se. Não precisa de end, "utiliza" o end do if.
Construindo um algoritmo só para exemplificar:
Pegando o exemplo acima, vamos usar o elseif.
---- Operadores de relação
Os operadores de relação são aqueles que vocês estudam em matemática: igual, maior igual, menor igual...Em lua, é um pouco diferente:
igual: = menor igual: <=
maior igual: >= verificação: ==
Esse de verificação serve para checkar se algo é realmente igual. A diferença dele para o de igual "=" é que o igual serve para atribuir valores.
Exemplo: se o level do player == 100 então -- verifica se o level do player é realmente 100
--- Operadores controladores
Esses operadores são o and e o or que significa basicamente "e" e "ou", respectivamente. O and verifica se todas as condições são verdadeiras para executar algo.
Exemplo: se o player tem level 100 e o nome dele é Leoking então
execute script
fim
Perceba que só será executado caso a condição de ser lvl 100 e o nome ser Leo sejam respeitadas. No caso do or, é necessário que apenas uma delas seja respeitadas.
Exemplo: se o player tem level 100 ou o nome dele é Leo então
execute script
fim
Nesse caso, com somente uma condição sendo respeitada, já é o bastante para que o script seja executado.
2.3 Variáveis: Servem basicamente para guardarem valores.
Exemplo:
O script retornará: king -- king é exatamente o valor da variável var.
2.4 Storage: É simplesmente uma função que vai guardar um valor ou letra, palavra, etc.
Para dar um storage usamos a função: setPlayerStorageValue(cid, valor, novo valor)
Exemplo: setPlayerStorageValue(cid, 1234, 1)
Para verificar se um player tem um storage usamos a função: getPlayerStorageValue(cid, valor)
Exemplo: getPlayerStorageValue(cid, 1234)
Essas funções você pode ver naquele arquivo de base: lista de funções em lua
Agora a última parte desse mini tutorial:
3. [ACTIONS]
3.1 Sintaxe das actions
3.2 Exemplo de actions
3.1 A sintaxe das actions é: function onUse(cid, item, fromPosition, itemEx, toPosition) mas também podem ser encontradas como fromPos, toPos, isso vai depender de como o scripter queira e como vai usar no script. Usei essa que está em negrito, pois, já é a padrão. Agora a explicação:
function onUse(cid, item, fromPosition, itemEx, toPosition)
Primeramente, é bom lembrar que assim como o if, toda função (function) tem seu end.
Exemplo:
Explicação da sintaxe:
onUse = ao Usar (assim que o player use um item)
cid = creature id -- quem vai usar o item
item = item que será usado ou item "principal"
fromPosition = da Posição
itemEx = item "secundário"
toPosition = para a Posição
3.2 Vamos colocar em prática tudo que lemos até agora.
Nossa action fará:
[/center] [center]Ao dar use em um item --- para inserir comentários que não alterarão o script, é só colocar -- e escrever[/center] [center]Se o player for level maior ou igual a 100 então[/center] [center]Sumona um monstro em uma posição[/center] [center]Manda uma mensagem para o player[/center] [center]Manda um efeito no player[/center] [center]se não for level 100[/center] [center]Manda uma mensagem para o player[/center] [center]fim do script[/center] [center] [/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx) --- sintaxe das actions[/center] [center]if getPlayerLevel(cid) >= 100 then -- se o level do player é maior igual a 100 então[/center] [center]doSummonCreature("Demon", {x=1, y=1, z=1}) --- sumona um demon na posição determinada. Todo valor que seja uma letra, palavra deve estar entre aspas. A posição, entre chaves.[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.") -- manda uma mensagem do tipo 22 (veja no constant.lua)[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10) -- manda um efeito de id 10 (veja constant.lua) na posição do player[/center] [center]else -- se não[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end -- end do if[/center] [center]end -- end da função[/center] [center] Toda script deve ser registrado em um arquivo.xml, no caso da nossa action,será registrado no actions.xml e como é o item que será usado, usaremos itemid: <action itemid="IDDOITEM" event="script" value="NOMEDOARQUIVO.lua"/> Esse foi nosso script usando quase tudo que explicamos anteriormente. Vamos usar agora storage e variáveis nesse script. Vimos que variáveis podem guardar valores, seja númerico ou não. Então, podemos fazer com que não precisemos editar o monstro, a posição e o level dentro do script. (não vou explicar o que é uma variável local e global, pois é intuitivo -- se tiverem dúvidas procurem em outros tutoriais). Podemos colocar: --- Guardando os valores com variáveis --- local monster = "Demon" -- entre aspas, lembre-se! local pos = {x=1,y=1,z=1} -- entre chaves! local minlevel = 100 -- minimo de level Ok até aqui, então nosso script ficaria: [/center] [center]local monster = "Demon"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Mas, digamos que vou passar esse script para um amigo e ele não sabe nada de editar scripts. Aí você fala, é só colocar o nome do monstro no lugar do Demon. Ele vai e faz: [/center] [center]local monster = "Rotworm" --- olha aqui[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Ou seja, vai sumonar um rotworm mas vai mandar a mensagem: Você sumonou um Demon. Como resolver isso? Existe os strings, (não vou me aprofundar) vou dar um exemplo e mostrar como ficaria. Exemplo: local var = king imprima("Você quis dizer ".. var .."?) Retornaria: Você quis dizer king? Percebam que é só colocar ".. variavel .." . Além de resolver o problema do monster, também poderíamos fazer isso com o level, no nosso script ficaria: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end[/center] [center]end[/center] [center] Sendo assim, seu amigo noob só vai precisar editar na parte de cima do script. Adicionando storage ao script. Nesse caso, faremos com que o item só possa ser usado uma única vez. Para isso, daremos um storage a ele quando o item for usado e verificaremos se o player já tem esse storage para ver se poderá ser usado o item novamente ou não. (Leia a parte de storage) A função que verifica se o player tem storage é : getPlayerStorageValue(cid, value), então: [/center] [center]se o player tiver esse storage menor ou igual a 0 então[/center] [center]execute o script[/center] [center]dê a storage -- para que o player n possa usar novamente[/center] [center]se não --- se ele já não tiver storage menor ou igual a 0, ou seja, ja tiver usado o item[/center] [center]mande msg negando[/center] [center] No script ficaria assim: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerStorageValue(cid, 1234) <= 0 then -- se o storage 1234 for menor ou igual a zero entao[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]setPlayerStorageValue(cid, 1234,1) --- dar storage 1234 pra q n possa usar novamente[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end --- end do if do getPlayerLevel[/center] [center]else -- se já tiver storage igual a 1[/center] [center]doPlayerSendTextMessage(cid, 22, "Você já usou esse item.") -- manda a mensagem[/center] [center]end -- end do if getPlayerStorage...[/center] [center]end -- end da função[/center] [center]
Então é isso galera, tentei englobar o maior número de informações necessárias para vocês começarem a fazer seus scripts e espero que esse tutorial ajude alguém. É bom lembrar que só isso não basta e que é sempre bom olhar os scripts dos outros e pelo menos tentar entender como que foram feitos. Vlw aí, abraços.
Créditos: 100% Leo
PS: Não quero ninguém pegando o Tutorial e colocando em outro fórum se for colocar em outro fórum deixa que eu ou o Leo .
-
VictorFT recebeu reputação de biellhb em [Básico] Aprendendo Script---Tutorial by Leo ---
Bom galera, venho através desse tutorial tentar ajudar aqueles que querem aprender um pouco mais sobre a área de scripting. Vai ser bem básico, como muita gente tinha me pedido por pm (então resolvi fazer para acabar com o enjoo =P). Acredito que existam muitos tutoriais, alguns bons, outros não, e como vinham me pedindo, ou os tutoriais eram ruins, ou queriam uma visão de outra pessoa (quem sabe com outra pessoa falando, entenda melhor). Diante mão, vou logo dizendo que não me considero um bom scripter ou coisa perto disso até porque estou nisso há menos de 1 mês, mas vou tentar ajudar as pessoas com o pouco que sei.
Nessa primeira parte, vamos ver os seguintes pontos:
1. [LÓGICA DE PROGRAMAÇÃO]
1.1 O que é um algoritmo?
1.2 Um exemplo de algoritmo.
1.3 Exercício: Faça seu próprio algoritmo.
1. Desde que existe o ser humano, existe programação. Quando os homens da pré-história iam caçar, ele se programavam, decidiam quais passos tinham que seguir a fim de alcançar a caça. (hehe) Com o computador não é diferente, você deve dar os passos para que ele possa executar as ações e alcançar o objetivo, que no nosso caso, é o sucesso do script. Isso é a linguagem de programação, é uma linguagem criada para instruir o computador a realizar suas tarefas, e o programador deve seguir uma lógica para colocar cada parte do script no seu devido local, essa é a lógica de programação.
1.1 Algoritmo é nada mais que uma "receita" que deve ter os passos seguidos pelo computador para realizar uma tarefa. Esses passos não devem deixar o computador com dúvidas, e portanto, devem ser bem definidos e claros.
1.2 Vamos a um exemplo de um algoritmo. Algoritmo: Preparar um cafezinho
Geralmente, tomamos um cafezinho logo quando acordamos então a primeira coisa que devemos fazer é:
Acordar
Se não tiver água quente então
Colocar água na panela
Colocar a panela no fogão
Ligar o fogão
Esperar água ferver
Vejam que se esses passos acima forem seguidos rigorosamente, você vai conseguir por a água para ferver. Continuando...
Mas se já tiver água quente então
Botar água na xícara
Botar duas colheres de açúcar
Botar uma colher de café em pó
Mexer
Tomar
Dizer: Delíiiciaa =P
Vejam, que aí estão os passos exatos para preparar um cafezinho. Aliás, mais do que preparar, até tomar o café.
Como ficou o algoritmo:
1.3 Faça um algoritmo para: Ir à escola/faculdade (não precisa postar, é só para treinar).
2. [sCRIPTEANDO]
2.1 Arquivos de Base
2.2 Controladores Lógicos
- Condicionais
- Operadores de relação
- Operadores-controladores
2.3 Variáveis
2.4 Storage
Nessa parte, vamos começar a parte de script realmente. Lembrando que existem muitos tutoriais e só esse aqui não é o bastante, até por estar bem básico.
2.1 Os arquivos que podem dar auxílio na hora de fazer os seus scripts são:
-- Em data/lib (alguns, global.lua) encontre o arquivo: 000-constant.lua que dá muitas informações sobre o server, como por exemplo, id dos channels, id das skulls, tipos de mensagens, etc.. é bastante útil na construção dos scripts.
-- Ot script Live by Colex: Programa que facilita bastante pros iniciantes. Ele marca algumas funções em uma cor diferente além de executar o script para ver se há algum erro de escrita. Em alguns fórums tem, é só usar o sistema de busca.
-- Notepad++: Um editor de texto que também pode ser útil.
2.2 Os controladores lógicos são aqueles que colocarão em prática a sua lógica de programação. São eles que guiarão os passos que o computador deve seguir.
--- Condicionais
Acho que todos sabem o que é um condicional. Como o nome já diz, ele abre uma condição para que algo possa ser feito.
Exemplo: Caso não chova, irei jogar bola.
Então, isso é uma condição, a condição de que não esteja chuvendo. Se não chover eu jogo, se chover não jogo.
Na programação, os principais condicionais são:
if -- equivale ao se em português. Está presente em todas linguagens de programação. Provavelmente, você já o viu nas aulas de português. Ele abre uma condição. Regra: Todo if tem seu end.
else -- equivale ao senão. Vai ser executado caso a primeira condição aberta pelo if seja falsa.
elseif -- equivale a "senão se" ou "mas se". Ele evita a repetição de vários se. Não precisa de end, "utiliza" o end do if.
Construindo um algoritmo só para exemplificar:
Pegando o exemplo acima, vamos usar o elseif.
---- Operadores de relação
Os operadores de relação são aqueles que vocês estudam em matemática: igual, maior igual, menor igual...Em lua, é um pouco diferente:
igual: = menor igual: <=
maior igual: >= verificação: ==
Esse de verificação serve para checkar se algo é realmente igual. A diferença dele para o de igual "=" é que o igual serve para atribuir valores.
Exemplo: se o level do player == 100 então -- verifica se o level do player é realmente 100
--- Operadores controladores
Esses operadores são o and e o or que significa basicamente "e" e "ou", respectivamente. O and verifica se todas as condições são verdadeiras para executar algo.
Exemplo: se o player tem level 100 e o nome dele é Leoking então
execute script
fim
Perceba que só será executado caso a condição de ser lvl 100 e o nome ser Leo sejam respeitadas. No caso do or, é necessário que apenas uma delas seja respeitadas.
Exemplo: se o player tem level 100 ou o nome dele é Leo então
execute script
fim
Nesse caso, com somente uma condição sendo respeitada, já é o bastante para que o script seja executado.
2.3 Variáveis: Servem basicamente para guardarem valores.
Exemplo:
O script retornará: king -- king é exatamente o valor da variável var.
2.4 Storage: É simplesmente uma função que vai guardar um valor ou letra, palavra, etc.
Para dar um storage usamos a função: setPlayerStorageValue(cid, valor, novo valor)
Exemplo: setPlayerStorageValue(cid, 1234, 1)
Para verificar se um player tem um storage usamos a função: getPlayerStorageValue(cid, valor)
Exemplo: getPlayerStorageValue(cid, 1234)
Essas funções você pode ver naquele arquivo de base: lista de funções em lua
Agora a última parte desse mini tutorial:
3. [ACTIONS]
3.1 Sintaxe das actions
3.2 Exemplo de actions
3.1 A sintaxe das actions é: function onUse(cid, item, fromPosition, itemEx, toPosition) mas também podem ser encontradas como fromPos, toPos, isso vai depender de como o scripter queira e como vai usar no script. Usei essa que está em negrito, pois, já é a padrão. Agora a explicação:
function onUse(cid, item, fromPosition, itemEx, toPosition)
Primeramente, é bom lembrar que assim como o if, toda função (function) tem seu end.
Exemplo:
Explicação da sintaxe:
onUse = ao Usar (assim que o player use um item)
cid = creature id -- quem vai usar o item
item = item que será usado ou item "principal"
fromPosition = da Posição
itemEx = item "secundário"
toPosition = para a Posição
3.2 Vamos colocar em prática tudo que lemos até agora.
Nossa action fará:
[/center] [center]Ao dar use em um item --- para inserir comentários que não alterarão o script, é só colocar -- e escrever[/center] [center]Se o player for level maior ou igual a 100 então[/center] [center]Sumona um monstro em uma posição[/center] [center]Manda uma mensagem para o player[/center] [center]Manda um efeito no player[/center] [center]se não for level 100[/center] [center]Manda uma mensagem para o player[/center] [center]fim do script[/center] [center] [/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx) --- sintaxe das actions[/center] [center]if getPlayerLevel(cid) >= 100 then -- se o level do player é maior igual a 100 então[/center] [center]doSummonCreature("Demon", {x=1, y=1, z=1}) --- sumona um demon na posição determinada. Todo valor que seja uma letra, palavra deve estar entre aspas. A posição, entre chaves.[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.") -- manda uma mensagem do tipo 22 (veja no constant.lua)[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10) -- manda um efeito de id 10 (veja constant.lua) na posição do player[/center] [center]else -- se não[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end -- end do if[/center] [center]end -- end da função[/center] [center] Toda script deve ser registrado em um arquivo.xml, no caso da nossa action,será registrado no actions.xml e como é o item que será usado, usaremos itemid: <action itemid="IDDOITEM" event="script" value="NOMEDOARQUIVO.lua"/> Esse foi nosso script usando quase tudo que explicamos anteriormente. Vamos usar agora storage e variáveis nesse script. Vimos que variáveis podem guardar valores, seja númerico ou não. Então, podemos fazer com que não precisemos editar o monstro, a posição e o level dentro do script. (não vou explicar o que é uma variável local e global, pois é intuitivo -- se tiverem dúvidas procurem em outros tutoriais). Podemos colocar: --- Guardando os valores com variáveis --- local monster = "Demon" -- entre aspas, lembre-se! local pos = {x=1,y=1,z=1} -- entre chaves! local minlevel = 100 -- minimo de level Ok até aqui, então nosso script ficaria: [/center] [center]local monster = "Demon"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Mas, digamos que vou passar esse script para um amigo e ele não sabe nada de editar scripts. Aí você fala, é só colocar o nome do monstro no lugar do Demon. Ele vai e faz: [/center] [center]local monster = "Rotworm" --- olha aqui[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Ou seja, vai sumonar um rotworm mas vai mandar a mensagem: Você sumonou um Demon. Como resolver isso? Existe os strings, (não vou me aprofundar) vou dar um exemplo e mostrar como ficaria. Exemplo: local var = king imprima("Você quis dizer ".. var .."?) Retornaria: Você quis dizer king? Percebam que é só colocar ".. variavel .." . Além de resolver o problema do monster, também poderíamos fazer isso com o level, no nosso script ficaria: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end[/center] [center]end[/center] [center] Sendo assim, seu amigo noob só vai precisar editar na parte de cima do script. Adicionando storage ao script. Nesse caso, faremos com que o item só possa ser usado uma única vez. Para isso, daremos um storage a ele quando o item for usado e verificaremos se o player já tem esse storage para ver se poderá ser usado o item novamente ou não. (Leia a parte de storage) A função que verifica se o player tem storage é : getPlayerStorageValue(cid, value), então: [/center] [center]se o player tiver esse storage menor ou igual a 0 então[/center] [center]execute o script[/center] [center]dê a storage -- para que o player n possa usar novamente[/center] [center]se não --- se ele já não tiver storage menor ou igual a 0, ou seja, ja tiver usado o item[/center] [center]mande msg negando[/center] [center] No script ficaria assim: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerStorageValue(cid, 1234) <= 0 then -- se o storage 1234 for menor ou igual a zero entao[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]setPlayerStorageValue(cid, 1234,1) --- dar storage 1234 pra q n possa usar novamente[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end --- end do if do getPlayerLevel[/center] [center]else -- se já tiver storage igual a 1[/center] [center]doPlayerSendTextMessage(cid, 22, "Você já usou esse item.") -- manda a mensagem[/center] [center]end -- end do if getPlayerStorage...[/center] [center]end -- end da função[/center] [center]
Então é isso galera, tentei englobar o maior número de informações necessárias para vocês começarem a fazer seus scripts e espero que esse tutorial ajude alguém. É bom lembrar que só isso não basta e que é sempre bom olhar os scripts dos outros e pelo menos tentar entender como que foram feitos. Vlw aí, abraços.
Créditos: 100% Leo
PS: Não quero ninguém pegando o Tutorial e colocando em outro fórum se for colocar em outro fórum deixa que eu ou o Leo .
-
VictorFT recebeu reputação de VertusSpriter em Haunted TreelingsCave bem editada , feita por Blez e Neon.
Fotos:
Client Version: 9.60
Credits: Remere, Blez, Neon.
Download Link: Haunted Treelings.otbm - Speedy Share - upload your files here
-
VictorFT recebeu reputação de bra em [Básico] Aprendendo Script---Tutorial by Leo ---
Bom galera, venho através desse tutorial tentar ajudar aqueles que querem aprender um pouco mais sobre a área de scripting. Vai ser bem básico, como muita gente tinha me pedido por pm (então resolvi fazer para acabar com o enjoo =P). Acredito que existam muitos tutoriais, alguns bons, outros não, e como vinham me pedindo, ou os tutoriais eram ruins, ou queriam uma visão de outra pessoa (quem sabe com outra pessoa falando, entenda melhor). Diante mão, vou logo dizendo que não me considero um bom scripter ou coisa perto disso até porque estou nisso há menos de 1 mês, mas vou tentar ajudar as pessoas com o pouco que sei.
Nessa primeira parte, vamos ver os seguintes pontos:
1. [LÓGICA DE PROGRAMAÇÃO]
1.1 O que é um algoritmo?
1.2 Um exemplo de algoritmo.
1.3 Exercício: Faça seu próprio algoritmo.
1. Desde que existe o ser humano, existe programação. Quando os homens da pré-história iam caçar, ele se programavam, decidiam quais passos tinham que seguir a fim de alcançar a caça. (hehe) Com o computador não é diferente, você deve dar os passos para que ele possa executar as ações e alcançar o objetivo, que no nosso caso, é o sucesso do script. Isso é a linguagem de programação, é uma linguagem criada para instruir o computador a realizar suas tarefas, e o programador deve seguir uma lógica para colocar cada parte do script no seu devido local, essa é a lógica de programação.
1.1 Algoritmo é nada mais que uma "receita" que deve ter os passos seguidos pelo computador para realizar uma tarefa. Esses passos não devem deixar o computador com dúvidas, e portanto, devem ser bem definidos e claros.
1.2 Vamos a um exemplo de um algoritmo. Algoritmo: Preparar um cafezinho
Geralmente, tomamos um cafezinho logo quando acordamos então a primeira coisa que devemos fazer é:
Acordar
Se não tiver água quente então
Colocar água na panela
Colocar a panela no fogão
Ligar o fogão
Esperar água ferver
Vejam que se esses passos acima forem seguidos rigorosamente, você vai conseguir por a água para ferver. Continuando...
Mas se já tiver água quente então
Botar água na xícara
Botar duas colheres de açúcar
Botar uma colher de café em pó
Mexer
Tomar
Dizer: Delíiiciaa =P
Vejam, que aí estão os passos exatos para preparar um cafezinho. Aliás, mais do que preparar, até tomar o café.
Como ficou o algoritmo:
1.3 Faça um algoritmo para: Ir à escola/faculdade (não precisa postar, é só para treinar).
2. [sCRIPTEANDO]
2.1 Arquivos de Base
2.2 Controladores Lógicos
- Condicionais
- Operadores de relação
- Operadores-controladores
2.3 Variáveis
2.4 Storage
Nessa parte, vamos começar a parte de script realmente. Lembrando que existem muitos tutoriais e só esse aqui não é o bastante, até por estar bem básico.
2.1 Os arquivos que podem dar auxílio na hora de fazer os seus scripts são:
-- Em data/lib (alguns, global.lua) encontre o arquivo: 000-constant.lua que dá muitas informações sobre o server, como por exemplo, id dos channels, id das skulls, tipos de mensagens, etc.. é bastante útil na construção dos scripts.
-- Ot script Live by Colex: Programa que facilita bastante pros iniciantes. Ele marca algumas funções em uma cor diferente além de executar o script para ver se há algum erro de escrita. Em alguns fórums tem, é só usar o sistema de busca.
-- Notepad++: Um editor de texto que também pode ser útil.
2.2 Os controladores lógicos são aqueles que colocarão em prática a sua lógica de programação. São eles que guiarão os passos que o computador deve seguir.
--- Condicionais
Acho que todos sabem o que é um condicional. Como o nome já diz, ele abre uma condição para que algo possa ser feito.
Exemplo: Caso não chova, irei jogar bola.
Então, isso é uma condição, a condição de que não esteja chuvendo. Se não chover eu jogo, se chover não jogo.
Na programação, os principais condicionais são:
if -- equivale ao se em português. Está presente em todas linguagens de programação. Provavelmente, você já o viu nas aulas de português. Ele abre uma condição. Regra: Todo if tem seu end.
else -- equivale ao senão. Vai ser executado caso a primeira condição aberta pelo if seja falsa.
elseif -- equivale a "senão se" ou "mas se". Ele evita a repetição de vários se. Não precisa de end, "utiliza" o end do if.
Construindo um algoritmo só para exemplificar:
Pegando o exemplo acima, vamos usar o elseif.
---- Operadores de relação
Os operadores de relação são aqueles que vocês estudam em matemática: igual, maior igual, menor igual...Em lua, é um pouco diferente:
igual: = menor igual: <=
maior igual: >= verificação: ==
Esse de verificação serve para checkar se algo é realmente igual. A diferença dele para o de igual "=" é que o igual serve para atribuir valores.
Exemplo: se o level do player == 100 então -- verifica se o level do player é realmente 100
--- Operadores controladores
Esses operadores são o and e o or que significa basicamente "e" e "ou", respectivamente. O and verifica se todas as condições são verdadeiras para executar algo.
Exemplo: se o player tem level 100 e o nome dele é Leoking então
execute script
fim
Perceba que só será executado caso a condição de ser lvl 100 e o nome ser Leo sejam respeitadas. No caso do or, é necessário que apenas uma delas seja respeitadas.
Exemplo: se o player tem level 100 ou o nome dele é Leo então
execute script
fim
Nesse caso, com somente uma condição sendo respeitada, já é o bastante para que o script seja executado.
2.3 Variáveis: Servem basicamente para guardarem valores.
Exemplo:
O script retornará: king -- king é exatamente o valor da variável var.
2.4 Storage: É simplesmente uma função que vai guardar um valor ou letra, palavra, etc.
Para dar um storage usamos a função: setPlayerStorageValue(cid, valor, novo valor)
Exemplo: setPlayerStorageValue(cid, 1234, 1)
Para verificar se um player tem um storage usamos a função: getPlayerStorageValue(cid, valor)
Exemplo: getPlayerStorageValue(cid, 1234)
Essas funções você pode ver naquele arquivo de base: lista de funções em lua
Agora a última parte desse mini tutorial:
3. [ACTIONS]
3.1 Sintaxe das actions
3.2 Exemplo de actions
3.1 A sintaxe das actions é: function onUse(cid, item, fromPosition, itemEx, toPosition) mas também podem ser encontradas como fromPos, toPos, isso vai depender de como o scripter queira e como vai usar no script. Usei essa que está em negrito, pois, já é a padrão. Agora a explicação:
function onUse(cid, item, fromPosition, itemEx, toPosition)
Primeramente, é bom lembrar que assim como o if, toda função (function) tem seu end.
Exemplo:
Explicação da sintaxe:
onUse = ao Usar (assim que o player use um item)
cid = creature id -- quem vai usar o item
item = item que será usado ou item "principal"
fromPosition = da Posição
itemEx = item "secundário"
toPosition = para a Posição
3.2 Vamos colocar em prática tudo que lemos até agora.
Nossa action fará:
[/center] [center]Ao dar use em um item --- para inserir comentários que não alterarão o script, é só colocar -- e escrever[/center] [center]Se o player for level maior ou igual a 100 então[/center] [center]Sumona um monstro em uma posição[/center] [center]Manda uma mensagem para o player[/center] [center]Manda um efeito no player[/center] [center]se não for level 100[/center] [center]Manda uma mensagem para o player[/center] [center]fim do script[/center] [center] [/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx) --- sintaxe das actions[/center] [center]if getPlayerLevel(cid) >= 100 then -- se o level do player é maior igual a 100 então[/center] [center]doSummonCreature("Demon", {x=1, y=1, z=1}) --- sumona um demon na posição determinada. Todo valor que seja uma letra, palavra deve estar entre aspas. A posição, entre chaves.[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.") -- manda uma mensagem do tipo 22 (veja no constant.lua)[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10) -- manda um efeito de id 10 (veja constant.lua) na posição do player[/center] [center]else -- se não[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end -- end do if[/center] [center]end -- end da função[/center] [center] Toda script deve ser registrado em um arquivo.xml, no caso da nossa action,será registrado no actions.xml e como é o item que será usado, usaremos itemid: <action itemid="IDDOITEM" event="script" value="NOMEDOARQUIVO.lua"/> Esse foi nosso script usando quase tudo que explicamos anteriormente. Vamos usar agora storage e variáveis nesse script. Vimos que variáveis podem guardar valores, seja númerico ou não. Então, podemos fazer com que não precisemos editar o monstro, a posição e o level dentro do script. (não vou explicar o que é uma variável local e global, pois é intuitivo -- se tiverem dúvidas procurem em outros tutoriais). Podemos colocar: --- Guardando os valores com variáveis --- local monster = "Demon" -- entre aspas, lembre-se! local pos = {x=1,y=1,z=1} -- entre chaves! local minlevel = 100 -- minimo de level Ok até aqui, então nosso script ficaria: [/center] [center]local monster = "Demon"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Mas, digamos que vou passar esse script para um amigo e ele não sabe nada de editar scripts. Aí você fala, é só colocar o nome do monstro no lugar do Demon. Ele vai e faz: [/center] [center]local monster = "Rotworm" --- olha aqui[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Ou seja, vai sumonar um rotworm mas vai mandar a mensagem: Você sumonou um Demon. Como resolver isso? Existe os strings, (não vou me aprofundar) vou dar um exemplo e mostrar como ficaria. Exemplo: local var = king imprima("Você quis dizer ".. var .."?) Retornaria: Você quis dizer king? Percebam que é só colocar ".. variavel .." . Além de resolver o problema do monster, também poderíamos fazer isso com o level, no nosso script ficaria: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end[/center] [center]end[/center] [center] Sendo assim, seu amigo noob só vai precisar editar na parte de cima do script. Adicionando storage ao script. Nesse caso, faremos com que o item só possa ser usado uma única vez. Para isso, daremos um storage a ele quando o item for usado e verificaremos se o player já tem esse storage para ver se poderá ser usado o item novamente ou não. (Leia a parte de storage) A função que verifica se o player tem storage é : getPlayerStorageValue(cid, value), então: [/center] [center]se o player tiver esse storage menor ou igual a 0 então[/center] [center]execute o script[/center] [center]dê a storage -- para que o player n possa usar novamente[/center] [center]se não --- se ele já não tiver storage menor ou igual a 0, ou seja, ja tiver usado o item[/center] [center]mande msg negando[/center] [center] No script ficaria assim: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerStorageValue(cid, 1234) <= 0 then -- se o storage 1234 for menor ou igual a zero entao[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]setPlayerStorageValue(cid, 1234,1) --- dar storage 1234 pra q n possa usar novamente[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end --- end do if do getPlayerLevel[/center] [center]else -- se já tiver storage igual a 1[/center] [center]doPlayerSendTextMessage(cid, 22, "Você já usou esse item.") -- manda a mensagem[/center] [center]end -- end do if getPlayerStorage...[/center] [center]end -- end da função[/center] [center]
Então é isso galera, tentei englobar o maior número de informações necessárias para vocês começarem a fazer seus scripts e espero que esse tutorial ajude alguém. É bom lembrar que só isso não basta e que é sempre bom olhar os scripts dos outros e pelo menos tentar entender como que foram feitos. Vlw aí, abraços.
Créditos: 100% Leo
PS: Não quero ninguém pegando o Tutorial e colocando em outro fórum se for colocar em outro fórum deixa que eu ou o Leo .
-
VictorFT recebeu reputação de japavrb15 em [Básico] Aprendendo Script---Tutorial by Leo ---
Bom galera, venho através desse tutorial tentar ajudar aqueles que querem aprender um pouco mais sobre a área de scripting. Vai ser bem básico, como muita gente tinha me pedido por pm (então resolvi fazer para acabar com o enjoo =P). Acredito que existam muitos tutoriais, alguns bons, outros não, e como vinham me pedindo, ou os tutoriais eram ruins, ou queriam uma visão de outra pessoa (quem sabe com outra pessoa falando, entenda melhor). Diante mão, vou logo dizendo que não me considero um bom scripter ou coisa perto disso até porque estou nisso há menos de 1 mês, mas vou tentar ajudar as pessoas com o pouco que sei.
Nessa primeira parte, vamos ver os seguintes pontos:
1. [LÓGICA DE PROGRAMAÇÃO]
1.1 O que é um algoritmo?
1.2 Um exemplo de algoritmo.
1.3 Exercício: Faça seu próprio algoritmo.
1. Desde que existe o ser humano, existe programação. Quando os homens da pré-história iam caçar, ele se programavam, decidiam quais passos tinham que seguir a fim de alcançar a caça. (hehe) Com o computador não é diferente, você deve dar os passos para que ele possa executar as ações e alcançar o objetivo, que no nosso caso, é o sucesso do script. Isso é a linguagem de programação, é uma linguagem criada para instruir o computador a realizar suas tarefas, e o programador deve seguir uma lógica para colocar cada parte do script no seu devido local, essa é a lógica de programação.
1.1 Algoritmo é nada mais que uma "receita" que deve ter os passos seguidos pelo computador para realizar uma tarefa. Esses passos não devem deixar o computador com dúvidas, e portanto, devem ser bem definidos e claros.
1.2 Vamos a um exemplo de um algoritmo. Algoritmo: Preparar um cafezinho
Geralmente, tomamos um cafezinho logo quando acordamos então a primeira coisa que devemos fazer é:
Acordar
Se não tiver água quente então
Colocar água na panela
Colocar a panela no fogão
Ligar o fogão
Esperar água ferver
Vejam que se esses passos acima forem seguidos rigorosamente, você vai conseguir por a água para ferver. Continuando...
Mas se já tiver água quente então
Botar água na xícara
Botar duas colheres de açúcar
Botar uma colher de café em pó
Mexer
Tomar
Dizer: Delíiiciaa =P
Vejam, que aí estão os passos exatos para preparar um cafezinho. Aliás, mais do que preparar, até tomar o café.
Como ficou o algoritmo:
1.3 Faça um algoritmo para: Ir à escola/faculdade (não precisa postar, é só para treinar).
2. [sCRIPTEANDO]
2.1 Arquivos de Base
2.2 Controladores Lógicos
- Condicionais
- Operadores de relação
- Operadores-controladores
2.3 Variáveis
2.4 Storage
Nessa parte, vamos começar a parte de script realmente. Lembrando que existem muitos tutoriais e só esse aqui não é o bastante, até por estar bem básico.
2.1 Os arquivos que podem dar auxílio na hora de fazer os seus scripts são:
-- Em data/lib (alguns, global.lua) encontre o arquivo: 000-constant.lua que dá muitas informações sobre o server, como por exemplo, id dos channels, id das skulls, tipos de mensagens, etc.. é bastante útil na construção dos scripts.
-- Ot script Live by Colex: Programa que facilita bastante pros iniciantes. Ele marca algumas funções em uma cor diferente além de executar o script para ver se há algum erro de escrita. Em alguns fórums tem, é só usar o sistema de busca.
-- Notepad++: Um editor de texto que também pode ser útil.
2.2 Os controladores lógicos são aqueles que colocarão em prática a sua lógica de programação. São eles que guiarão os passos que o computador deve seguir.
--- Condicionais
Acho que todos sabem o que é um condicional. Como o nome já diz, ele abre uma condição para que algo possa ser feito.
Exemplo: Caso não chova, irei jogar bola.
Então, isso é uma condição, a condição de que não esteja chuvendo. Se não chover eu jogo, se chover não jogo.
Na programação, os principais condicionais são:
if -- equivale ao se em português. Está presente em todas linguagens de programação. Provavelmente, você já o viu nas aulas de português. Ele abre uma condição. Regra: Todo if tem seu end.
else -- equivale ao senão. Vai ser executado caso a primeira condição aberta pelo if seja falsa.
elseif -- equivale a "senão se" ou "mas se". Ele evita a repetição de vários se. Não precisa de end, "utiliza" o end do if.
Construindo um algoritmo só para exemplificar:
Pegando o exemplo acima, vamos usar o elseif.
---- Operadores de relação
Os operadores de relação são aqueles que vocês estudam em matemática: igual, maior igual, menor igual...Em lua, é um pouco diferente:
igual: = menor igual: <=
maior igual: >= verificação: ==
Esse de verificação serve para checkar se algo é realmente igual. A diferença dele para o de igual "=" é que o igual serve para atribuir valores.
Exemplo: se o level do player == 100 então -- verifica se o level do player é realmente 100
--- Operadores controladores
Esses operadores são o and e o or que significa basicamente "e" e "ou", respectivamente. O and verifica se todas as condições são verdadeiras para executar algo.
Exemplo: se o player tem level 100 e o nome dele é Leoking então
execute script
fim
Perceba que só será executado caso a condição de ser lvl 100 e o nome ser Leo sejam respeitadas. No caso do or, é necessário que apenas uma delas seja respeitadas.
Exemplo: se o player tem level 100 ou o nome dele é Leo então
execute script
fim
Nesse caso, com somente uma condição sendo respeitada, já é o bastante para que o script seja executado.
2.3 Variáveis: Servem basicamente para guardarem valores.
Exemplo:
O script retornará: king -- king é exatamente o valor da variável var.
2.4 Storage: É simplesmente uma função que vai guardar um valor ou letra, palavra, etc.
Para dar um storage usamos a função: setPlayerStorageValue(cid, valor, novo valor)
Exemplo: setPlayerStorageValue(cid, 1234, 1)
Para verificar se um player tem um storage usamos a função: getPlayerStorageValue(cid, valor)
Exemplo: getPlayerStorageValue(cid, 1234)
Essas funções você pode ver naquele arquivo de base: lista de funções em lua
Agora a última parte desse mini tutorial:
3. [ACTIONS]
3.1 Sintaxe das actions
3.2 Exemplo de actions
3.1 A sintaxe das actions é: function onUse(cid, item, fromPosition, itemEx, toPosition) mas também podem ser encontradas como fromPos, toPos, isso vai depender de como o scripter queira e como vai usar no script. Usei essa que está em negrito, pois, já é a padrão. Agora a explicação:
function onUse(cid, item, fromPosition, itemEx, toPosition)
Primeramente, é bom lembrar que assim como o if, toda função (function) tem seu end.
Exemplo:
Explicação da sintaxe:
onUse = ao Usar (assim que o player use um item)
cid = creature id -- quem vai usar o item
item = item que será usado ou item "principal"
fromPosition = da Posição
itemEx = item "secundário"
toPosition = para a Posição
3.2 Vamos colocar em prática tudo que lemos até agora.
Nossa action fará:
[/center] [center]Ao dar use em um item --- para inserir comentários que não alterarão o script, é só colocar -- e escrever[/center] [center]Se o player for level maior ou igual a 100 então[/center] [center]Sumona um monstro em uma posição[/center] [center]Manda uma mensagem para o player[/center] [center]Manda um efeito no player[/center] [center]se não for level 100[/center] [center]Manda uma mensagem para o player[/center] [center]fim do script[/center] [center] [/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx) --- sintaxe das actions[/center] [center]if getPlayerLevel(cid) >= 100 then -- se o level do player é maior igual a 100 então[/center] [center]doSummonCreature("Demon", {x=1, y=1, z=1}) --- sumona um demon na posição determinada. Todo valor que seja uma letra, palavra deve estar entre aspas. A posição, entre chaves.[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.") -- manda uma mensagem do tipo 22 (veja no constant.lua)[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10) -- manda um efeito de id 10 (veja constant.lua) na posição do player[/center] [center]else -- se não[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end -- end do if[/center] [center]end -- end da função[/center] [center] Toda script deve ser registrado em um arquivo.xml, no caso da nossa action,será registrado no actions.xml e como é o item que será usado, usaremos itemid: <action itemid="IDDOITEM" event="script" value="NOMEDOARQUIVO.lua"/> Esse foi nosso script usando quase tudo que explicamos anteriormente. Vamos usar agora storage e variáveis nesse script. Vimos que variáveis podem guardar valores, seja númerico ou não. Então, podemos fazer com que não precisemos editar o monstro, a posição e o level dentro do script. (não vou explicar o que é uma variável local e global, pois é intuitivo -- se tiverem dúvidas procurem em outros tutoriais). Podemos colocar: --- Guardando os valores com variáveis --- local monster = "Demon" -- entre aspas, lembre-se! local pos = {x=1,y=1,z=1} -- entre chaves! local minlevel = 100 -- minimo de level Ok até aqui, então nosso script ficaria: [/center] [center]local monster = "Demon"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Mas, digamos que vou passar esse script para um amigo e ele não sabe nada de editar scripts. Aí você fala, é só colocar o nome do monstro no lugar do Demon. Ele vai e faz: [/center] [center]local monster = "Rotworm" --- olha aqui[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Ou seja, vai sumonar um rotworm mas vai mandar a mensagem: Você sumonou um Demon. Como resolver isso? Existe os strings, (não vou me aprofundar) vou dar um exemplo e mostrar como ficaria. Exemplo: local var = king imprima("Você quis dizer ".. var .."?) Retornaria: Você quis dizer king? Percebam que é só colocar ".. variavel .." . Além de resolver o problema do monster, também poderíamos fazer isso com o level, no nosso script ficaria: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end[/center] [center]end[/center] [center] Sendo assim, seu amigo noob só vai precisar editar na parte de cima do script. Adicionando storage ao script. Nesse caso, faremos com que o item só possa ser usado uma única vez. Para isso, daremos um storage a ele quando o item for usado e verificaremos se o player já tem esse storage para ver se poderá ser usado o item novamente ou não. (Leia a parte de storage) A função que verifica se o player tem storage é : getPlayerStorageValue(cid, value), então: [/center] [center]se o player tiver esse storage menor ou igual a 0 então[/center] [center]execute o script[/center] [center]dê a storage -- para que o player n possa usar novamente[/center] [center]se não --- se ele já não tiver storage menor ou igual a 0, ou seja, ja tiver usado o item[/center] [center]mande msg negando[/center] [center] No script ficaria assim: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerStorageValue(cid, 1234) <= 0 then -- se o storage 1234 for menor ou igual a zero entao[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]setPlayerStorageValue(cid, 1234,1) --- dar storage 1234 pra q n possa usar novamente[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end --- end do if do getPlayerLevel[/center] [center]else -- se já tiver storage igual a 1[/center] [center]doPlayerSendTextMessage(cid, 22, "Você já usou esse item.") -- manda a mensagem[/center] [center]end -- end do if getPlayerStorage...[/center] [center]end -- end da função[/center] [center]
Então é isso galera, tentei englobar o maior número de informações necessárias para vocês começarem a fazer seus scripts e espero que esse tutorial ajude alguém. É bom lembrar que só isso não basta e que é sempre bom olhar os scripts dos outros e pelo menos tentar entender como que foram feitos. Vlw aí, abraços.
Créditos: 100% Leo
PS: Não quero ninguém pegando o Tutorial e colocando em outro fórum se for colocar em outro fórum deixa que eu ou o Leo .
-
VictorFT recebeu reputação de Otavio Loko em [Básico] Aprendendo Script---Tutorial by Leo ---
Bom galera, venho através desse tutorial tentar ajudar aqueles que querem aprender um pouco mais sobre a área de scripting. Vai ser bem básico, como muita gente tinha me pedido por pm (então resolvi fazer para acabar com o enjoo =P). Acredito que existam muitos tutoriais, alguns bons, outros não, e como vinham me pedindo, ou os tutoriais eram ruins, ou queriam uma visão de outra pessoa (quem sabe com outra pessoa falando, entenda melhor). Diante mão, vou logo dizendo que não me considero um bom scripter ou coisa perto disso até porque estou nisso há menos de 1 mês, mas vou tentar ajudar as pessoas com o pouco que sei.
Nessa primeira parte, vamos ver os seguintes pontos:
1. [LÓGICA DE PROGRAMAÇÃO]
1.1 O que é um algoritmo?
1.2 Um exemplo de algoritmo.
1.3 Exercício: Faça seu próprio algoritmo.
1. Desde que existe o ser humano, existe programação. Quando os homens da pré-história iam caçar, ele se programavam, decidiam quais passos tinham que seguir a fim de alcançar a caça. (hehe) Com o computador não é diferente, você deve dar os passos para que ele possa executar as ações e alcançar o objetivo, que no nosso caso, é o sucesso do script. Isso é a linguagem de programação, é uma linguagem criada para instruir o computador a realizar suas tarefas, e o programador deve seguir uma lógica para colocar cada parte do script no seu devido local, essa é a lógica de programação.
1.1 Algoritmo é nada mais que uma "receita" que deve ter os passos seguidos pelo computador para realizar uma tarefa. Esses passos não devem deixar o computador com dúvidas, e portanto, devem ser bem definidos e claros.
1.2 Vamos a um exemplo de um algoritmo. Algoritmo: Preparar um cafezinho
Geralmente, tomamos um cafezinho logo quando acordamos então a primeira coisa que devemos fazer é:
Acordar
Se não tiver água quente então
Colocar água na panela
Colocar a panela no fogão
Ligar o fogão
Esperar água ferver
Vejam que se esses passos acima forem seguidos rigorosamente, você vai conseguir por a água para ferver. Continuando...
Mas se já tiver água quente então
Botar água na xícara
Botar duas colheres de açúcar
Botar uma colher de café em pó
Mexer
Tomar
Dizer: Delíiiciaa =P
Vejam, que aí estão os passos exatos para preparar um cafezinho. Aliás, mais do que preparar, até tomar o café.
Como ficou o algoritmo:
1.3 Faça um algoritmo para: Ir à escola/faculdade (não precisa postar, é só para treinar).
2. [sCRIPTEANDO]
2.1 Arquivos de Base
2.2 Controladores Lógicos
- Condicionais
- Operadores de relação
- Operadores-controladores
2.3 Variáveis
2.4 Storage
Nessa parte, vamos começar a parte de script realmente. Lembrando que existem muitos tutoriais e só esse aqui não é o bastante, até por estar bem básico.
2.1 Os arquivos que podem dar auxílio na hora de fazer os seus scripts são:
-- Em data/lib (alguns, global.lua) encontre o arquivo: 000-constant.lua que dá muitas informações sobre o server, como por exemplo, id dos channels, id das skulls, tipos de mensagens, etc.. é bastante útil na construção dos scripts.
-- Ot script Live by Colex: Programa que facilita bastante pros iniciantes. Ele marca algumas funções em uma cor diferente além de executar o script para ver se há algum erro de escrita. Em alguns fórums tem, é só usar o sistema de busca.
-- Notepad++: Um editor de texto que também pode ser útil.
2.2 Os controladores lógicos são aqueles que colocarão em prática a sua lógica de programação. São eles que guiarão os passos que o computador deve seguir.
--- Condicionais
Acho que todos sabem o que é um condicional. Como o nome já diz, ele abre uma condição para que algo possa ser feito.
Exemplo: Caso não chova, irei jogar bola.
Então, isso é uma condição, a condição de que não esteja chuvendo. Se não chover eu jogo, se chover não jogo.
Na programação, os principais condicionais são:
if -- equivale ao se em português. Está presente em todas linguagens de programação. Provavelmente, você já o viu nas aulas de português. Ele abre uma condição. Regra: Todo if tem seu end.
else -- equivale ao senão. Vai ser executado caso a primeira condição aberta pelo if seja falsa.
elseif -- equivale a "senão se" ou "mas se". Ele evita a repetição de vários se. Não precisa de end, "utiliza" o end do if.
Construindo um algoritmo só para exemplificar:
Pegando o exemplo acima, vamos usar o elseif.
---- Operadores de relação
Os operadores de relação são aqueles que vocês estudam em matemática: igual, maior igual, menor igual...Em lua, é um pouco diferente:
igual: = menor igual: <=
maior igual: >= verificação: ==
Esse de verificação serve para checkar se algo é realmente igual. A diferença dele para o de igual "=" é que o igual serve para atribuir valores.
Exemplo: se o level do player == 100 então -- verifica se o level do player é realmente 100
--- Operadores controladores
Esses operadores são o and e o or que significa basicamente "e" e "ou", respectivamente. O and verifica se todas as condições são verdadeiras para executar algo.
Exemplo: se o player tem level 100 e o nome dele é Leoking então
execute script
fim
Perceba que só será executado caso a condição de ser lvl 100 e o nome ser Leo sejam respeitadas. No caso do or, é necessário que apenas uma delas seja respeitadas.
Exemplo: se o player tem level 100 ou o nome dele é Leo então
execute script
fim
Nesse caso, com somente uma condição sendo respeitada, já é o bastante para que o script seja executado.
2.3 Variáveis: Servem basicamente para guardarem valores.
Exemplo:
O script retornará: king -- king é exatamente o valor da variável var.
2.4 Storage: É simplesmente uma função que vai guardar um valor ou letra, palavra, etc.
Para dar um storage usamos a função: setPlayerStorageValue(cid, valor, novo valor)
Exemplo: setPlayerStorageValue(cid, 1234, 1)
Para verificar se um player tem um storage usamos a função: getPlayerStorageValue(cid, valor)
Exemplo: getPlayerStorageValue(cid, 1234)
Essas funções você pode ver naquele arquivo de base: lista de funções em lua
Agora a última parte desse mini tutorial:
3. [ACTIONS]
3.1 Sintaxe das actions
3.2 Exemplo de actions
3.1 A sintaxe das actions é: function onUse(cid, item, fromPosition, itemEx, toPosition) mas também podem ser encontradas como fromPos, toPos, isso vai depender de como o scripter queira e como vai usar no script. Usei essa que está em negrito, pois, já é a padrão. Agora a explicação:
function onUse(cid, item, fromPosition, itemEx, toPosition)
Primeramente, é bom lembrar que assim como o if, toda função (function) tem seu end.
Exemplo:
Explicação da sintaxe:
onUse = ao Usar (assim que o player use um item)
cid = creature id -- quem vai usar o item
item = item que será usado ou item "principal"
fromPosition = da Posição
itemEx = item "secundário"
toPosition = para a Posição
3.2 Vamos colocar em prática tudo que lemos até agora.
Nossa action fará:
[/center] [center]Ao dar use em um item --- para inserir comentários que não alterarão o script, é só colocar -- e escrever[/center] [center]Se o player for level maior ou igual a 100 então[/center] [center]Sumona um monstro em uma posição[/center] [center]Manda uma mensagem para o player[/center] [center]Manda um efeito no player[/center] [center]se não for level 100[/center] [center]Manda uma mensagem para o player[/center] [center]fim do script[/center] [center] [/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx) --- sintaxe das actions[/center] [center]if getPlayerLevel(cid) >= 100 then -- se o level do player é maior igual a 100 então[/center] [center]doSummonCreature("Demon", {x=1, y=1, z=1}) --- sumona um demon na posição determinada. Todo valor que seja uma letra, palavra deve estar entre aspas. A posição, entre chaves.[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.") -- manda uma mensagem do tipo 22 (veja no constant.lua)[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10) -- manda um efeito de id 10 (veja constant.lua) na posição do player[/center] [center]else -- se não[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end -- end do if[/center] [center]end -- end da função[/center] [center] Toda script deve ser registrado em um arquivo.xml, no caso da nossa action,será registrado no actions.xml e como é o item que será usado, usaremos itemid: <action itemid="IDDOITEM" event="script" value="NOMEDOARQUIVO.lua"/> Esse foi nosso script usando quase tudo que explicamos anteriormente. Vamos usar agora storage e variáveis nesse script. Vimos que variáveis podem guardar valores, seja númerico ou não. Então, podemos fazer com que não precisemos editar o monstro, a posição e o level dentro do script. (não vou explicar o que é uma variável local e global, pois é intuitivo -- se tiverem dúvidas procurem em outros tutoriais). Podemos colocar: --- Guardando os valores com variáveis --- local monster = "Demon" -- entre aspas, lembre-se! local pos = {x=1,y=1,z=1} -- entre chaves! local minlevel = 100 -- minimo de level Ok até aqui, então nosso script ficaria: [/center] [center]local monster = "Demon"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Mas, digamos que vou passar esse script para um amigo e ele não sabe nada de editar scripts. Aí você fala, é só colocar o nome do monstro no lugar do Demon. Ele vai e faz: [/center] [center]local monster = "Rotworm" --- olha aqui[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Ou seja, vai sumonar um rotworm mas vai mandar a mensagem: Você sumonou um Demon. Como resolver isso? Existe os strings, (não vou me aprofundar) vou dar um exemplo e mostrar como ficaria. Exemplo: local var = king imprima("Você quis dizer ".. var .."?) Retornaria: Você quis dizer king? Percebam que é só colocar ".. variavel .." . Além de resolver o problema do monster, também poderíamos fazer isso com o level, no nosso script ficaria: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end[/center] [center]end[/center] [center] Sendo assim, seu amigo noob só vai precisar editar na parte de cima do script. Adicionando storage ao script. Nesse caso, faremos com que o item só possa ser usado uma única vez. Para isso, daremos um storage a ele quando o item for usado e verificaremos se o player já tem esse storage para ver se poderá ser usado o item novamente ou não. (Leia a parte de storage) A função que verifica se o player tem storage é : getPlayerStorageValue(cid, value), então: [/center] [center]se o player tiver esse storage menor ou igual a 0 então[/center] [center]execute o script[/center] [center]dê a storage -- para que o player n possa usar novamente[/center] [center]se não --- se ele já não tiver storage menor ou igual a 0, ou seja, ja tiver usado o item[/center] [center]mande msg negando[/center] [center] No script ficaria assim: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerStorageValue(cid, 1234) <= 0 then -- se o storage 1234 for menor ou igual a zero entao[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]setPlayerStorageValue(cid, 1234,1) --- dar storage 1234 pra q n possa usar novamente[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end --- end do if do getPlayerLevel[/center] [center]else -- se já tiver storage igual a 1[/center] [center]doPlayerSendTextMessage(cid, 22, "Você já usou esse item.") -- manda a mensagem[/center] [center]end -- end do if getPlayerStorage...[/center] [center]end -- end da função[/center] [center]
Então é isso galera, tentei englobar o maior número de informações necessárias para vocês começarem a fazer seus scripts e espero que esse tutorial ajude alguém. É bom lembrar que só isso não basta e que é sempre bom olhar os scripts dos outros e pelo menos tentar entender como que foram feitos. Vlw aí, abraços.
Créditos: 100% Leo
PS: Não quero ninguém pegando o Tutorial e colocando em outro fórum se for colocar em outro fórum deixa que eu ou o Leo .
-
VictorFT recebeu reputação de wallacewts em [Básico] Aprendendo Script---Tutorial by Leo ---
Bom galera, venho através desse tutorial tentar ajudar aqueles que querem aprender um pouco mais sobre a área de scripting. Vai ser bem básico, como muita gente tinha me pedido por pm (então resolvi fazer para acabar com o enjoo =P). Acredito que existam muitos tutoriais, alguns bons, outros não, e como vinham me pedindo, ou os tutoriais eram ruins, ou queriam uma visão de outra pessoa (quem sabe com outra pessoa falando, entenda melhor). Diante mão, vou logo dizendo que não me considero um bom scripter ou coisa perto disso até porque estou nisso há menos de 1 mês, mas vou tentar ajudar as pessoas com o pouco que sei.
Nessa primeira parte, vamos ver os seguintes pontos:
1. [LÓGICA DE PROGRAMAÇÃO]
1.1 O que é um algoritmo?
1.2 Um exemplo de algoritmo.
1.3 Exercício: Faça seu próprio algoritmo.
1. Desde que existe o ser humano, existe programação. Quando os homens da pré-história iam caçar, ele se programavam, decidiam quais passos tinham que seguir a fim de alcançar a caça. (hehe) Com o computador não é diferente, você deve dar os passos para que ele possa executar as ações e alcançar o objetivo, que no nosso caso, é o sucesso do script. Isso é a linguagem de programação, é uma linguagem criada para instruir o computador a realizar suas tarefas, e o programador deve seguir uma lógica para colocar cada parte do script no seu devido local, essa é a lógica de programação.
1.1 Algoritmo é nada mais que uma "receita" que deve ter os passos seguidos pelo computador para realizar uma tarefa. Esses passos não devem deixar o computador com dúvidas, e portanto, devem ser bem definidos e claros.
1.2 Vamos a um exemplo de um algoritmo. Algoritmo: Preparar um cafezinho
Geralmente, tomamos um cafezinho logo quando acordamos então a primeira coisa que devemos fazer é:
Acordar
Se não tiver água quente então
Colocar água na panela
Colocar a panela no fogão
Ligar o fogão
Esperar água ferver
Vejam que se esses passos acima forem seguidos rigorosamente, você vai conseguir por a água para ferver. Continuando...
Mas se já tiver água quente então
Botar água na xícara
Botar duas colheres de açúcar
Botar uma colher de café em pó
Mexer
Tomar
Dizer: Delíiiciaa =P
Vejam, que aí estão os passos exatos para preparar um cafezinho. Aliás, mais do que preparar, até tomar o café.
Como ficou o algoritmo:
1.3 Faça um algoritmo para: Ir à escola/faculdade (não precisa postar, é só para treinar).
2. [sCRIPTEANDO]
2.1 Arquivos de Base
2.2 Controladores Lógicos
- Condicionais
- Operadores de relação
- Operadores-controladores
2.3 Variáveis
2.4 Storage
Nessa parte, vamos começar a parte de script realmente. Lembrando que existem muitos tutoriais e só esse aqui não é o bastante, até por estar bem básico.
2.1 Os arquivos que podem dar auxílio na hora de fazer os seus scripts são:
-- Em data/lib (alguns, global.lua) encontre o arquivo: 000-constant.lua que dá muitas informações sobre o server, como por exemplo, id dos channels, id das skulls, tipos de mensagens, etc.. é bastante útil na construção dos scripts.
-- Ot script Live by Colex: Programa que facilita bastante pros iniciantes. Ele marca algumas funções em uma cor diferente além de executar o script para ver se há algum erro de escrita. Em alguns fórums tem, é só usar o sistema de busca.
-- Notepad++: Um editor de texto que também pode ser útil.
2.2 Os controladores lógicos são aqueles que colocarão em prática a sua lógica de programação. São eles que guiarão os passos que o computador deve seguir.
--- Condicionais
Acho que todos sabem o que é um condicional. Como o nome já diz, ele abre uma condição para que algo possa ser feito.
Exemplo: Caso não chova, irei jogar bola.
Então, isso é uma condição, a condição de que não esteja chuvendo. Se não chover eu jogo, se chover não jogo.
Na programação, os principais condicionais são:
if -- equivale ao se em português. Está presente em todas linguagens de programação. Provavelmente, você já o viu nas aulas de português. Ele abre uma condição. Regra: Todo if tem seu end.
else -- equivale ao senão. Vai ser executado caso a primeira condição aberta pelo if seja falsa.
elseif -- equivale a "senão se" ou "mas se". Ele evita a repetição de vários se. Não precisa de end, "utiliza" o end do if.
Construindo um algoritmo só para exemplificar:
Pegando o exemplo acima, vamos usar o elseif.
---- Operadores de relação
Os operadores de relação são aqueles que vocês estudam em matemática: igual, maior igual, menor igual...Em lua, é um pouco diferente:
igual: = menor igual: <=
maior igual: >= verificação: ==
Esse de verificação serve para checkar se algo é realmente igual. A diferença dele para o de igual "=" é que o igual serve para atribuir valores.
Exemplo: se o level do player == 100 então -- verifica se o level do player é realmente 100
--- Operadores controladores
Esses operadores são o and e o or que significa basicamente "e" e "ou", respectivamente. O and verifica se todas as condições são verdadeiras para executar algo.
Exemplo: se o player tem level 100 e o nome dele é Leoking então
execute script
fim
Perceba que só será executado caso a condição de ser lvl 100 e o nome ser Leo sejam respeitadas. No caso do or, é necessário que apenas uma delas seja respeitadas.
Exemplo: se o player tem level 100 ou o nome dele é Leo então
execute script
fim
Nesse caso, com somente uma condição sendo respeitada, já é o bastante para que o script seja executado.
2.3 Variáveis: Servem basicamente para guardarem valores.
Exemplo:
O script retornará: king -- king é exatamente o valor da variável var.
2.4 Storage: É simplesmente uma função que vai guardar um valor ou letra, palavra, etc.
Para dar um storage usamos a função: setPlayerStorageValue(cid, valor, novo valor)
Exemplo: setPlayerStorageValue(cid, 1234, 1)
Para verificar se um player tem um storage usamos a função: getPlayerStorageValue(cid, valor)
Exemplo: getPlayerStorageValue(cid, 1234)
Essas funções você pode ver naquele arquivo de base: lista de funções em lua
Agora a última parte desse mini tutorial:
3. [ACTIONS]
3.1 Sintaxe das actions
3.2 Exemplo de actions
3.1 A sintaxe das actions é: function onUse(cid, item, fromPosition, itemEx, toPosition) mas também podem ser encontradas como fromPos, toPos, isso vai depender de como o scripter queira e como vai usar no script. Usei essa que está em negrito, pois, já é a padrão. Agora a explicação:
function onUse(cid, item, fromPosition, itemEx, toPosition)
Primeramente, é bom lembrar que assim como o if, toda função (function) tem seu end.
Exemplo:
Explicação da sintaxe:
onUse = ao Usar (assim que o player use um item)
cid = creature id -- quem vai usar o item
item = item que será usado ou item "principal"
fromPosition = da Posição
itemEx = item "secundário"
toPosition = para a Posição
3.2 Vamos colocar em prática tudo que lemos até agora.
Nossa action fará:
[/center] [center]Ao dar use em um item --- para inserir comentários que não alterarão o script, é só colocar -- e escrever[/center] [center]Se o player for level maior ou igual a 100 então[/center] [center]Sumona um monstro em uma posição[/center] [center]Manda uma mensagem para o player[/center] [center]Manda um efeito no player[/center] [center]se não for level 100[/center] [center]Manda uma mensagem para o player[/center] [center]fim do script[/center] [center] [/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx) --- sintaxe das actions[/center] [center]if getPlayerLevel(cid) >= 100 then -- se o level do player é maior igual a 100 então[/center] [center]doSummonCreature("Demon", {x=1, y=1, z=1}) --- sumona um demon na posição determinada. Todo valor que seja uma letra, palavra deve estar entre aspas. A posição, entre chaves.[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.") -- manda uma mensagem do tipo 22 (veja no constant.lua)[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10) -- manda um efeito de id 10 (veja constant.lua) na posição do player[/center] [center]else -- se não[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end -- end do if[/center] [center]end -- end da função[/center] [center] Toda script deve ser registrado em um arquivo.xml, no caso da nossa action,será registrado no actions.xml e como é o item que será usado, usaremos itemid: <action itemid="IDDOITEM" event="script" value="NOMEDOARQUIVO.lua"/> Esse foi nosso script usando quase tudo que explicamos anteriormente. Vamos usar agora storage e variáveis nesse script. Vimos que variáveis podem guardar valores, seja númerico ou não. Então, podemos fazer com que não precisemos editar o monstro, a posição e o level dentro do script. (não vou explicar o que é uma variável local e global, pois é intuitivo -- se tiverem dúvidas procurem em outros tutoriais). Podemos colocar: --- Guardando os valores com variáveis --- local monster = "Demon" -- entre aspas, lembre-se! local pos = {x=1,y=1,z=1} -- entre chaves! local minlevel = 100 -- minimo de level Ok até aqui, então nosso script ficaria: [/center] [center]local monster = "Demon"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Mas, digamos que vou passar esse script para um amigo e ele não sabe nada de editar scripts. Aí você fala, é só colocar o nome do monstro no lugar do Demon. Ele vai e faz: [/center] [center]local monster = "Rotworm" --- olha aqui[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Ou seja, vai sumonar um rotworm mas vai mandar a mensagem: Você sumonou um Demon. Como resolver isso? Existe os strings, (não vou me aprofundar) vou dar um exemplo e mostrar como ficaria. Exemplo: local var = king imprima("Você quis dizer ".. var .."?) Retornaria: Você quis dizer king? Percebam que é só colocar ".. variavel .." . Além de resolver o problema do monster, também poderíamos fazer isso com o level, no nosso script ficaria: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end[/center] [center]end[/center] [center] Sendo assim, seu amigo noob só vai precisar editar na parte de cima do script. Adicionando storage ao script. Nesse caso, faremos com que o item só possa ser usado uma única vez. Para isso, daremos um storage a ele quando o item for usado e verificaremos se o player já tem esse storage para ver se poderá ser usado o item novamente ou não. (Leia a parte de storage) A função que verifica se o player tem storage é : getPlayerStorageValue(cid, value), então: [/center] [center]se o player tiver esse storage menor ou igual a 0 então[/center] [center]execute o script[/center] [center]dê a storage -- para que o player n possa usar novamente[/center] [center]se não --- se ele já não tiver storage menor ou igual a 0, ou seja, ja tiver usado o item[/center] [center]mande msg negando[/center] [center] No script ficaria assim: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerStorageValue(cid, 1234) <= 0 then -- se o storage 1234 for menor ou igual a zero entao[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]setPlayerStorageValue(cid, 1234,1) --- dar storage 1234 pra q n possa usar novamente[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end --- end do if do getPlayerLevel[/center] [center]else -- se já tiver storage igual a 1[/center] [center]doPlayerSendTextMessage(cid, 22, "Você já usou esse item.") -- manda a mensagem[/center] [center]end -- end do if getPlayerStorage...[/center] [center]end -- end da função[/center] [center]
Então é isso galera, tentei englobar o maior número de informações necessárias para vocês começarem a fazer seus scripts e espero que esse tutorial ajude alguém. É bom lembrar que só isso não basta e que é sempre bom olhar os scripts dos outros e pelo menos tentar entender como que foram feitos. Vlw aí, abraços.
Créditos: 100% Leo
PS: Não quero ninguém pegando o Tutorial e colocando em outro fórum se for colocar em outro fórum deixa que eu ou o Leo .
-
VictorFT recebeu reputação de Show X em [Básico] Aprendendo Script---Tutorial by Leo ---
Bom galera, venho através desse tutorial tentar ajudar aqueles que querem aprender um pouco mais sobre a área de scripting. Vai ser bem básico, como muita gente tinha me pedido por pm (então resolvi fazer para acabar com o enjoo =P). Acredito que existam muitos tutoriais, alguns bons, outros não, e como vinham me pedindo, ou os tutoriais eram ruins, ou queriam uma visão de outra pessoa (quem sabe com outra pessoa falando, entenda melhor). Diante mão, vou logo dizendo que não me considero um bom scripter ou coisa perto disso até porque estou nisso há menos de 1 mês, mas vou tentar ajudar as pessoas com o pouco que sei.
Nessa primeira parte, vamos ver os seguintes pontos:
1. [LÓGICA DE PROGRAMAÇÃO]
1.1 O que é um algoritmo?
1.2 Um exemplo de algoritmo.
1.3 Exercício: Faça seu próprio algoritmo.
1. Desde que existe o ser humano, existe programação. Quando os homens da pré-história iam caçar, ele se programavam, decidiam quais passos tinham que seguir a fim de alcançar a caça. (hehe) Com o computador não é diferente, você deve dar os passos para que ele possa executar as ações e alcançar o objetivo, que no nosso caso, é o sucesso do script. Isso é a linguagem de programação, é uma linguagem criada para instruir o computador a realizar suas tarefas, e o programador deve seguir uma lógica para colocar cada parte do script no seu devido local, essa é a lógica de programação.
1.1 Algoritmo é nada mais que uma "receita" que deve ter os passos seguidos pelo computador para realizar uma tarefa. Esses passos não devem deixar o computador com dúvidas, e portanto, devem ser bem definidos e claros.
1.2 Vamos a um exemplo de um algoritmo. Algoritmo: Preparar um cafezinho
Geralmente, tomamos um cafezinho logo quando acordamos então a primeira coisa que devemos fazer é:
Acordar
Se não tiver água quente então
Colocar água na panela
Colocar a panela no fogão
Ligar o fogão
Esperar água ferver
Vejam que se esses passos acima forem seguidos rigorosamente, você vai conseguir por a água para ferver. Continuando...
Mas se já tiver água quente então
Botar água na xícara
Botar duas colheres de açúcar
Botar uma colher de café em pó
Mexer
Tomar
Dizer: Delíiiciaa =P
Vejam, que aí estão os passos exatos para preparar um cafezinho. Aliás, mais do que preparar, até tomar o café.
Como ficou o algoritmo:
1.3 Faça um algoritmo para: Ir à escola/faculdade (não precisa postar, é só para treinar).
2. [sCRIPTEANDO]
2.1 Arquivos de Base
2.2 Controladores Lógicos
- Condicionais
- Operadores de relação
- Operadores-controladores
2.3 Variáveis
2.4 Storage
Nessa parte, vamos começar a parte de script realmente. Lembrando que existem muitos tutoriais e só esse aqui não é o bastante, até por estar bem básico.
2.1 Os arquivos que podem dar auxílio na hora de fazer os seus scripts são:
-- Em data/lib (alguns, global.lua) encontre o arquivo: 000-constant.lua que dá muitas informações sobre o server, como por exemplo, id dos channels, id das skulls, tipos de mensagens, etc.. é bastante útil na construção dos scripts.
-- Ot script Live by Colex: Programa que facilita bastante pros iniciantes. Ele marca algumas funções em uma cor diferente além de executar o script para ver se há algum erro de escrita. Em alguns fórums tem, é só usar o sistema de busca.
-- Notepad++: Um editor de texto que também pode ser útil.
2.2 Os controladores lógicos são aqueles que colocarão em prática a sua lógica de programação. São eles que guiarão os passos que o computador deve seguir.
--- Condicionais
Acho que todos sabem o que é um condicional. Como o nome já diz, ele abre uma condição para que algo possa ser feito.
Exemplo: Caso não chova, irei jogar bola.
Então, isso é uma condição, a condição de que não esteja chuvendo. Se não chover eu jogo, se chover não jogo.
Na programação, os principais condicionais são:
if -- equivale ao se em português. Está presente em todas linguagens de programação. Provavelmente, você já o viu nas aulas de português. Ele abre uma condição. Regra: Todo if tem seu end.
else -- equivale ao senão. Vai ser executado caso a primeira condição aberta pelo if seja falsa.
elseif -- equivale a "senão se" ou "mas se". Ele evita a repetição de vários se. Não precisa de end, "utiliza" o end do if.
Construindo um algoritmo só para exemplificar:
Pegando o exemplo acima, vamos usar o elseif.
---- Operadores de relação
Os operadores de relação são aqueles que vocês estudam em matemática: igual, maior igual, menor igual...Em lua, é um pouco diferente:
igual: = menor igual: <=
maior igual: >= verificação: ==
Esse de verificação serve para checkar se algo é realmente igual. A diferença dele para o de igual "=" é que o igual serve para atribuir valores.
Exemplo: se o level do player == 100 então -- verifica se o level do player é realmente 100
--- Operadores controladores
Esses operadores são o and e o or que significa basicamente "e" e "ou", respectivamente. O and verifica se todas as condições são verdadeiras para executar algo.
Exemplo: se o player tem level 100 e o nome dele é Leoking então
execute script
fim
Perceba que só será executado caso a condição de ser lvl 100 e o nome ser Leo sejam respeitadas. No caso do or, é necessário que apenas uma delas seja respeitadas.
Exemplo: se o player tem level 100 ou o nome dele é Leo então
execute script
fim
Nesse caso, com somente uma condição sendo respeitada, já é o bastante para que o script seja executado.
2.3 Variáveis: Servem basicamente para guardarem valores.
Exemplo:
O script retornará: king -- king é exatamente o valor da variável var.
2.4 Storage: É simplesmente uma função que vai guardar um valor ou letra, palavra, etc.
Para dar um storage usamos a função: setPlayerStorageValue(cid, valor, novo valor)
Exemplo: setPlayerStorageValue(cid, 1234, 1)
Para verificar se um player tem um storage usamos a função: getPlayerStorageValue(cid, valor)
Exemplo: getPlayerStorageValue(cid, 1234)
Essas funções você pode ver naquele arquivo de base: lista de funções em lua
Agora a última parte desse mini tutorial:
3. [ACTIONS]
3.1 Sintaxe das actions
3.2 Exemplo de actions
3.1 A sintaxe das actions é: function onUse(cid, item, fromPosition, itemEx, toPosition) mas também podem ser encontradas como fromPos, toPos, isso vai depender de como o scripter queira e como vai usar no script. Usei essa que está em negrito, pois, já é a padrão. Agora a explicação:
function onUse(cid, item, fromPosition, itemEx, toPosition)
Primeramente, é bom lembrar que assim como o if, toda função (function) tem seu end.
Exemplo:
Explicação da sintaxe:
onUse = ao Usar (assim que o player use um item)
cid = creature id -- quem vai usar o item
item = item que será usado ou item "principal"
fromPosition = da Posição
itemEx = item "secundário"
toPosition = para a Posição
3.2 Vamos colocar em prática tudo que lemos até agora.
Nossa action fará:
[/center] [center]Ao dar use em um item --- para inserir comentários que não alterarão o script, é só colocar -- e escrever[/center] [center]Se o player for level maior ou igual a 100 então[/center] [center]Sumona um monstro em uma posição[/center] [center]Manda uma mensagem para o player[/center] [center]Manda um efeito no player[/center] [center]se não for level 100[/center] [center]Manda uma mensagem para o player[/center] [center]fim do script[/center] [center] [/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx) --- sintaxe das actions[/center] [center]if getPlayerLevel(cid) >= 100 then -- se o level do player é maior igual a 100 então[/center] [center]doSummonCreature("Demon", {x=1, y=1, z=1}) --- sumona um demon na posição determinada. Todo valor que seja uma letra, palavra deve estar entre aspas. A posição, entre chaves.[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.") -- manda uma mensagem do tipo 22 (veja no constant.lua)[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10) -- manda um efeito de id 10 (veja constant.lua) na posição do player[/center] [center]else -- se não[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end -- end do if[/center] [center]end -- end da função[/center] [center] Toda script deve ser registrado em um arquivo.xml, no caso da nossa action,será registrado no actions.xml e como é o item que será usado, usaremos itemid: <action itemid="IDDOITEM" event="script" value="NOMEDOARQUIVO.lua"/> Esse foi nosso script usando quase tudo que explicamos anteriormente. Vamos usar agora storage e variáveis nesse script. Vimos que variáveis podem guardar valores, seja númerico ou não. Então, podemos fazer com que não precisemos editar o monstro, a posição e o level dentro do script. (não vou explicar o que é uma variável local e global, pois é intuitivo -- se tiverem dúvidas procurem em outros tutoriais). Podemos colocar: --- Guardando os valores com variáveis --- local monster = "Demon" -- entre aspas, lembre-se! local pos = {x=1,y=1,z=1} -- entre chaves! local minlevel = 100 -- minimo de level Ok até aqui, então nosso script ficaria: [/center] [center]local monster = "Demon"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Mas, digamos que vou passar esse script para um amigo e ele não sabe nada de editar scripts. Aí você fala, é só colocar o nome do monstro no lugar do Demon. Ele vai e faz: [/center] [center]local monster = "Rotworm" --- olha aqui[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Ou seja, vai sumonar um rotworm mas vai mandar a mensagem: Você sumonou um Demon. Como resolver isso? Existe os strings, (não vou me aprofundar) vou dar um exemplo e mostrar como ficaria. Exemplo: local var = king imprima("Você quis dizer ".. var .."?) Retornaria: Você quis dizer king? Percebam que é só colocar ".. variavel .." . Além de resolver o problema do monster, também poderíamos fazer isso com o level, no nosso script ficaria: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end[/center] [center]end[/center] [center] Sendo assim, seu amigo noob só vai precisar editar na parte de cima do script. Adicionando storage ao script. Nesse caso, faremos com que o item só possa ser usado uma única vez. Para isso, daremos um storage a ele quando o item for usado e verificaremos se o player já tem esse storage para ver se poderá ser usado o item novamente ou não. (Leia a parte de storage) A função que verifica se o player tem storage é : getPlayerStorageValue(cid, value), então: [/center] [center]se o player tiver esse storage menor ou igual a 0 então[/center] [center]execute o script[/center] [center]dê a storage -- para que o player n possa usar novamente[/center] [center]se não --- se ele já não tiver storage menor ou igual a 0, ou seja, ja tiver usado o item[/center] [center]mande msg negando[/center] [center] No script ficaria assim: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerStorageValue(cid, 1234) <= 0 then -- se o storage 1234 for menor ou igual a zero entao[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]setPlayerStorageValue(cid, 1234,1) --- dar storage 1234 pra q n possa usar novamente[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end --- end do if do getPlayerLevel[/center] [center]else -- se já tiver storage igual a 1[/center] [center]doPlayerSendTextMessage(cid, 22, "Você já usou esse item.") -- manda a mensagem[/center] [center]end -- end do if getPlayerStorage...[/center] [center]end -- end da função[/center] [center]
Então é isso galera, tentei englobar o maior número de informações necessárias para vocês começarem a fazer seus scripts e espero que esse tutorial ajude alguém. É bom lembrar que só isso não basta e que é sempre bom olhar os scripts dos outros e pelo menos tentar entender como que foram feitos. Vlw aí, abraços.
Créditos: 100% Leo
PS: Não quero ninguém pegando o Tutorial e colocando em outro fórum se for colocar em outro fórum deixa que eu ou o Leo .
-
VictorFT recebeu reputação de kabesudao em [Básico] Aprendendo Script---Tutorial by Leo ---
Bom galera, venho através desse tutorial tentar ajudar aqueles que querem aprender um pouco mais sobre a área de scripting. Vai ser bem básico, como muita gente tinha me pedido por pm (então resolvi fazer para acabar com o enjoo =P). Acredito que existam muitos tutoriais, alguns bons, outros não, e como vinham me pedindo, ou os tutoriais eram ruins, ou queriam uma visão de outra pessoa (quem sabe com outra pessoa falando, entenda melhor). Diante mão, vou logo dizendo que não me considero um bom scripter ou coisa perto disso até porque estou nisso há menos de 1 mês, mas vou tentar ajudar as pessoas com o pouco que sei.
Nessa primeira parte, vamos ver os seguintes pontos:
1. [LÓGICA DE PROGRAMAÇÃO]
1.1 O que é um algoritmo?
1.2 Um exemplo de algoritmo.
1.3 Exercício: Faça seu próprio algoritmo.
1. Desde que existe o ser humano, existe programação. Quando os homens da pré-história iam caçar, ele se programavam, decidiam quais passos tinham que seguir a fim de alcançar a caça. (hehe) Com o computador não é diferente, você deve dar os passos para que ele possa executar as ações e alcançar o objetivo, que no nosso caso, é o sucesso do script. Isso é a linguagem de programação, é uma linguagem criada para instruir o computador a realizar suas tarefas, e o programador deve seguir uma lógica para colocar cada parte do script no seu devido local, essa é a lógica de programação.
1.1 Algoritmo é nada mais que uma "receita" que deve ter os passos seguidos pelo computador para realizar uma tarefa. Esses passos não devem deixar o computador com dúvidas, e portanto, devem ser bem definidos e claros.
1.2 Vamos a um exemplo de um algoritmo. Algoritmo: Preparar um cafezinho
Geralmente, tomamos um cafezinho logo quando acordamos então a primeira coisa que devemos fazer é:
Acordar
Se não tiver água quente então
Colocar água na panela
Colocar a panela no fogão
Ligar o fogão
Esperar água ferver
Vejam que se esses passos acima forem seguidos rigorosamente, você vai conseguir por a água para ferver. Continuando...
Mas se já tiver água quente então
Botar água na xícara
Botar duas colheres de açúcar
Botar uma colher de café em pó
Mexer
Tomar
Dizer: Delíiiciaa =P
Vejam, que aí estão os passos exatos para preparar um cafezinho. Aliás, mais do que preparar, até tomar o café.
Como ficou o algoritmo:
1.3 Faça um algoritmo para: Ir à escola/faculdade (não precisa postar, é só para treinar).
2. [sCRIPTEANDO]
2.1 Arquivos de Base
2.2 Controladores Lógicos
- Condicionais
- Operadores de relação
- Operadores-controladores
2.3 Variáveis
2.4 Storage
Nessa parte, vamos começar a parte de script realmente. Lembrando que existem muitos tutoriais e só esse aqui não é o bastante, até por estar bem básico.
2.1 Os arquivos que podem dar auxílio na hora de fazer os seus scripts são:
-- Em data/lib (alguns, global.lua) encontre o arquivo: 000-constant.lua que dá muitas informações sobre o server, como por exemplo, id dos channels, id das skulls, tipos de mensagens, etc.. é bastante útil na construção dos scripts.
-- Ot script Live by Colex: Programa que facilita bastante pros iniciantes. Ele marca algumas funções em uma cor diferente além de executar o script para ver se há algum erro de escrita. Em alguns fórums tem, é só usar o sistema de busca.
-- Notepad++: Um editor de texto que também pode ser útil.
2.2 Os controladores lógicos são aqueles que colocarão em prática a sua lógica de programação. São eles que guiarão os passos que o computador deve seguir.
--- Condicionais
Acho que todos sabem o que é um condicional. Como o nome já diz, ele abre uma condição para que algo possa ser feito.
Exemplo: Caso não chova, irei jogar bola.
Então, isso é uma condição, a condição de que não esteja chuvendo. Se não chover eu jogo, se chover não jogo.
Na programação, os principais condicionais são:
if -- equivale ao se em português. Está presente em todas linguagens de programação. Provavelmente, você já o viu nas aulas de português. Ele abre uma condição. Regra: Todo if tem seu end.
else -- equivale ao senão. Vai ser executado caso a primeira condição aberta pelo if seja falsa.
elseif -- equivale a "senão se" ou "mas se". Ele evita a repetição de vários se. Não precisa de end, "utiliza" o end do if.
Construindo um algoritmo só para exemplificar:
Pegando o exemplo acima, vamos usar o elseif.
---- Operadores de relação
Os operadores de relação são aqueles que vocês estudam em matemática: igual, maior igual, menor igual...Em lua, é um pouco diferente:
igual: = menor igual: <=
maior igual: >= verificação: ==
Esse de verificação serve para checkar se algo é realmente igual. A diferença dele para o de igual "=" é que o igual serve para atribuir valores.
Exemplo: se o level do player == 100 então -- verifica se o level do player é realmente 100
--- Operadores controladores
Esses operadores são o and e o or que significa basicamente "e" e "ou", respectivamente. O and verifica se todas as condições são verdadeiras para executar algo.
Exemplo: se o player tem level 100 e o nome dele é Leoking então
execute script
fim
Perceba que só será executado caso a condição de ser lvl 100 e o nome ser Leo sejam respeitadas. No caso do or, é necessário que apenas uma delas seja respeitadas.
Exemplo: se o player tem level 100 ou o nome dele é Leo então
execute script
fim
Nesse caso, com somente uma condição sendo respeitada, já é o bastante para que o script seja executado.
2.3 Variáveis: Servem basicamente para guardarem valores.
Exemplo:
O script retornará: king -- king é exatamente o valor da variável var.
2.4 Storage: É simplesmente uma função que vai guardar um valor ou letra, palavra, etc.
Para dar um storage usamos a função: setPlayerStorageValue(cid, valor, novo valor)
Exemplo: setPlayerStorageValue(cid, 1234, 1)
Para verificar se um player tem um storage usamos a função: getPlayerStorageValue(cid, valor)
Exemplo: getPlayerStorageValue(cid, 1234)
Essas funções você pode ver naquele arquivo de base: lista de funções em lua
Agora a última parte desse mini tutorial:
3. [ACTIONS]
3.1 Sintaxe das actions
3.2 Exemplo de actions
3.1 A sintaxe das actions é: function onUse(cid, item, fromPosition, itemEx, toPosition) mas também podem ser encontradas como fromPos, toPos, isso vai depender de como o scripter queira e como vai usar no script. Usei essa que está em negrito, pois, já é a padrão. Agora a explicação:
function onUse(cid, item, fromPosition, itemEx, toPosition)
Primeramente, é bom lembrar que assim como o if, toda função (function) tem seu end.
Exemplo:
Explicação da sintaxe:
onUse = ao Usar (assim que o player use um item)
cid = creature id -- quem vai usar o item
item = item que será usado ou item "principal"
fromPosition = da Posição
itemEx = item "secundário"
toPosition = para a Posição
3.2 Vamos colocar em prática tudo que lemos até agora.
Nossa action fará:
[/center] [center]Ao dar use em um item --- para inserir comentários que não alterarão o script, é só colocar -- e escrever[/center] [center]Se o player for level maior ou igual a 100 então[/center] [center]Sumona um monstro em uma posição[/center] [center]Manda uma mensagem para o player[/center] [center]Manda um efeito no player[/center] [center]se não for level 100[/center] [center]Manda uma mensagem para o player[/center] [center]fim do script[/center] [center] [/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx) --- sintaxe das actions[/center] [center]if getPlayerLevel(cid) >= 100 then -- se o level do player é maior igual a 100 então[/center] [center]doSummonCreature("Demon", {x=1, y=1, z=1}) --- sumona um demon na posição determinada. Todo valor que seja uma letra, palavra deve estar entre aspas. A posição, entre chaves.[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.") -- manda uma mensagem do tipo 22 (veja no constant.lua)[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10) -- manda um efeito de id 10 (veja constant.lua) na posição do player[/center] [center]else -- se não[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end -- end do if[/center] [center]end -- end da função[/center] [center] Toda script deve ser registrado em um arquivo.xml, no caso da nossa action,será registrado no actions.xml e como é o item que será usado, usaremos itemid: <action itemid="IDDOITEM" event="script" value="NOMEDOARQUIVO.lua"/> Esse foi nosso script usando quase tudo que explicamos anteriormente. Vamos usar agora storage e variáveis nesse script. Vimos que variáveis podem guardar valores, seja númerico ou não. Então, podemos fazer com que não precisemos editar o monstro, a posição e o level dentro do script. (não vou explicar o que é uma variável local e global, pois é intuitivo -- se tiverem dúvidas procurem em outros tutoriais). Podemos colocar: --- Guardando os valores com variáveis --- local monster = "Demon" -- entre aspas, lembre-se! local pos = {x=1,y=1,z=1} -- entre chaves! local minlevel = 100 -- minimo de level Ok até aqui, então nosso script ficaria: [/center] [center]local monster = "Demon"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Mas, digamos que vou passar esse script para um amigo e ele não sabe nada de editar scripts. Aí você fala, é só colocar o nome do monstro no lugar do Demon. Ele vai e faz: [/center] [center]local monster = "Rotworm" --- olha aqui[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Ou seja, vai sumonar um rotworm mas vai mandar a mensagem: Você sumonou um Demon. Como resolver isso? Existe os strings, (não vou me aprofundar) vou dar um exemplo e mostrar como ficaria. Exemplo: local var = king imprima("Você quis dizer ".. var .."?) Retornaria: Você quis dizer king? Percebam que é só colocar ".. variavel .." . Além de resolver o problema do monster, também poderíamos fazer isso com o level, no nosso script ficaria: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end[/center] [center]end[/center] [center] Sendo assim, seu amigo noob só vai precisar editar na parte de cima do script. Adicionando storage ao script. Nesse caso, faremos com que o item só possa ser usado uma única vez. Para isso, daremos um storage a ele quando o item for usado e verificaremos se o player já tem esse storage para ver se poderá ser usado o item novamente ou não. (Leia a parte de storage) A função que verifica se o player tem storage é : getPlayerStorageValue(cid, value), então: [/center] [center]se o player tiver esse storage menor ou igual a 0 então[/center] [center]execute o script[/center] [center]dê a storage -- para que o player n possa usar novamente[/center] [center]se não --- se ele já não tiver storage menor ou igual a 0, ou seja, ja tiver usado o item[/center] [center]mande msg negando[/center] [center] No script ficaria assim: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerStorageValue(cid, 1234) <= 0 then -- se o storage 1234 for menor ou igual a zero entao[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]setPlayerStorageValue(cid, 1234,1) --- dar storage 1234 pra q n possa usar novamente[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end --- end do if do getPlayerLevel[/center] [center]else -- se já tiver storage igual a 1[/center] [center]doPlayerSendTextMessage(cid, 22, "Você já usou esse item.") -- manda a mensagem[/center] [center]end -- end do if getPlayerStorage...[/center] [center]end -- end da função[/center] [center]
Então é isso galera, tentei englobar o maior número de informações necessárias para vocês começarem a fazer seus scripts e espero que esse tutorial ajude alguém. É bom lembrar que só isso não basta e que é sempre bom olhar os scripts dos outros e pelo menos tentar entender como que foram feitos. Vlw aí, abraços.
Créditos: 100% Leo
PS: Não quero ninguém pegando o Tutorial e colocando em outro fórum se for colocar em outro fórum deixa que eu ou o Leo .
-
VictorFT recebeu reputação de Fernandooww em Galera como crio items vip?Fiz o Script da Crystal Arrow e aqui está
<item id="2352" article="a" name="NOME DA ARROW"> <attribute key="weight" value="200" /> <attribute key="attack" value="VALOR DO ATAQUE" /> <attribute key="HitChance" value="100"/> <attribute key="weaponType" value="distance" /> <attribute key="shootType" value="shiverarrow" /> <attribute key="range" value="10" /> <attribute key="breakChance" value="0" /> <attribute key="ammoAction" value="moveback" /> </item> Configurações: Agora a Wand Estilo Holy <item id="Id da wand desejada" article="a" name="Nome Da Wand"> <attribute key="weight" value="3800" /> <attribute key="shootType" value="holy" /> <attribute key="range" value="4" /> <attribute key="weaponType" value="wand" /> <attribute key="magiclevelpoints" value="DEPENDE SE VOCÊ QUISER" /> </item> Configurações: <item id="7424" article="a" name="Nome Da Wand"> <attribute key="weight" value="3800" /> <attribute key="shootType" value="holy" /> <attribute key="range" value="4" /> <attribute key="weaponType" value="wand" /> </item> Agora vá em Weapons e abra Weapons.xml <wand id="ID" level="7" mana="2" min="8" max="18" type="holy" event="function" value="default"> <!-- Nome da Wand --> <vocation id="1"/> <vocation id="2"/> </wand>
Configurações:
Obrigado Se Gostou da REP+
-
VictorFT recebeu reputação de Fernandooww em Galera como crio items vip?Fiz o Script da Crystal Arrow e aqui está
<item id="2352" article="a" name="NOME DA ARROW"> <attribute key="weight" value="200" /> <attribute key="attack" value="VALOR DO ATAQUE" /> <attribute key="HitChance" value="100"/> <attribute key="weaponType" value="distance" /> <attribute key="shootType" value="shiverarrow" /> <attribute key="range" value="10" /> <attribute key="breakChance" value="0" /> <attribute key="ammoAction" value="moveback" /> </item> Configurações: Agora a Wand Estilo Holy <item id="Id da wand desejada" article="a" name="Nome Da Wand"> <attribute key="weight" value="3800" /> <attribute key="shootType" value="holy" /> <attribute key="range" value="4" /> <attribute key="weaponType" value="wand" /> <attribute key="magiclevelpoints" value="DEPENDE SE VOCÊ QUISER" /> </item> Configurações: <item id="7424" article="a" name="Nome Da Wand"> <attribute key="weight" value="3800" /> <attribute key="shootType" value="holy" /> <attribute key="range" value="4" /> <attribute key="weaponType" value="wand" /> </item> Agora vá em Weapons e abra Weapons.xml <wand id="ID" level="7" mana="2" min="8" max="18" type="holy" event="function" value="default"> <!-- Nome da Wand --> <vocation id="1"/> <vocation id="2"/> </wand>
Configurações:
Obrigado Se Gostou da REP+
-
VictorFT recebeu reputação de gabriel147 em Templo YurotsYurot's Templo Editado
(versão 9.5)
Primeiramente, este Templo não fui eu que fiz quem fez foi o DUMAL , pedi autorização pra. Ele concordou.
Mesmo se for postar um mapa de outra pessoa é legal pedir autorização ou bote os créditos.Porque isto é Ripping não por os créditos, roubar não é legal e você pode ser processado.
"Vou Postar um mapa yurots que eu estava editando mais parei de editar então ele ta incompleto mais a parte que esta feita esta boa (eu acho pelo menos =])"
Créditos:
DuMal - Mapa/download
VictorFT - Só trouxe conteúdo
Download: semnadaprafazeretentandoteralgumaideiaboa.otbm
o Mapa esta na versão 9.6
-
VictorFT recebeu reputação de Sommer em Hokai CityHokai city é uma Cidade de RPG espero que gostem
Fotos:
Créditos : Hokai
Download link:
RPGProject /////
Reupload.!!!
RPGProject.otbm - Speedy Share - upload your files here
-
VictorFT recebeu reputação de Movie em [Tutorial] TemploTutorial Templo
~~
Eai galera tudo bom? Hoje vim ensinar a montar um templo.
Templo é a base de um Ot, sempre que for montar um mapa próprio comece pelo templo, pois o Jogador nascerá lá.Alguns ot's o Jogador terá mais de um Local para nascer , por exemplo Global , você pode ser de Carlin,Thais e etc
O templo é muito importante,não é porque seu ot vai ter um local que o jogador vai nascer ai você pensa assim "Ah. não vou fazer outro templo" então não irá ter cidades no seu Ot?Templo é um local sagrado, toda cidade deve ter pode ser em cima de uma Cachoeira, pode ser deserto,gelo,fogo,destruído e oque for.Mas tem que ter um Templo.
Exemplos de Templos:
VictorFT (Templo com Nature e sem Nature Normal)
Alissow (Templo Com Nature)
Vital900 (Templo Agradável)
AnneMotta
DuMal
Começando Seu Templo
Primeiro Passo : faça a base do Seu templo, uma estrutura legal meio que agradável e bonita não precisa ser tão grande mas como o Alissow disse Cidades grandes tem que ter Templos Grandes cidades pequenas templos pequenos, então utilize diversas Wall's.
Faça algo coerente não faça Quadrado e nem faça com Auto Border.
Segundo Passo:Agora fazendo uma ideia bem rápida não irei escrever muita coisa nesse Passo, apenas veja a imagem que você irá entender.
Terceiro Passo: Utilize a ideia do Segundo Passo fora do templo , e adicione framework wall (id: 10228) ,e vá colocando na parte do seu templo até ficar assim , fica bem legal , então vamos fazendo assim em todo os andares do templo,você pode escolher outra wall se quiser mas eu acho mais legal pra esse estilo a FrameWork Wall!
Ficará assim:
Quarto Passo: Adicione outras wall's no andar superior ficará igual a imagem abaixo. Como podem ver eu fiz um ArchWay Grande (id: 1122/1123/1124/1125) ficará desse jeito.Fica bem legal né ? Se quiser fazer um templo mais 'Bruto' você pode usar Gate's eu acho mais 'bruto' , mas é com você.
Quinto Passo: Adicione limestone pillar, para ficar legal e destacado , e não vai deixar 'repetitivo' , mas Victor como assim 'repetitivo' . Por exemplo um templo não precisa ser quadrado completamente, deixar algumas 'dobras' com tanto que fique Bonito.
Quinto Passo: Adicione uma escada no Meio e principalmente adicione as Frame's Works para deixar seu templo bonito e agradável, como podem ver eu adicionei uma Parede em frente a escada, isso é bem legal e bonito, para ficar 'elegante' bote lit wall lamp (id: 2040)
Sexto Passo: Faça o outro andar , aqui não tem muita coisa para explicar , se estiver fazendo um Templo igual o meu só copiar, mas faça assim é a base de alguns Templos de Cidade Grande.
Sétimo Passo : Agora igual o Quarto passo adicione Limestone pillar e Stone Archway (id: 916/917) faça algo onde o pessoal irá ver a paisagem pense igual na Vida Real para fazer algo bonito mas 'transforme' essa ideia em Tibia.Como podem ver a Ideia do segundo Passo Está completa neste Andar, Eu adoro essa ideia acho bem interessante.E adicione Umas frame work's e uma ' Cortina ' daqui a pouco vocês irão entender pra que usar está 'Cortina'.
Oitavo Passo: Não irei ficar neste andar por muito tempo , então vou explicar bem rápido.Neste andar adicione o telhado 'Yalahar', algumas Stone ArchWay, metal fittings, outra Cortina e algumas Gate's ( id: 9940/9943/9939 ) , para ficar bonito também adicione LimeStone Pillar.
Nono Passo: Último andar que o jogadores vão chegar e irão nascer, adicione os telhados Yalahar's, e algumas Paredes. Se lembra da cortina? Nossa cortina terá o Inicio aqui.Adicione uma estátua, um piso diferente onde o Player irá nascer.E como eu disse desdo início do Tópico adicione Frame Work's para dar outro Estilo.
E Em cima adicione mais um Telhado
Resultado Final:
Ficou até que legal já fiz melhores, porém tem um bug, mas é isto oque devemos fazer Chegar até o Resultado final assim.Fazer um templo bem legal e agradável.
Então é isso o Tutorial de Templo, Obrigado a todos.
Se quiser contato comigo adicione no msn:
[email protected]
Skype:
Victor.fernandes.t
Créditos: VictorFT (Fotos,texto e mapa)
DuMal (Ideia do Templo)
Obrigado.
Att.
VictorFT
-
VictorFT recebeu reputação de Bissonho em [Básico] Aprendendo Script---Tutorial by Leo ---
Bom galera, venho através desse tutorial tentar ajudar aqueles que querem aprender um pouco mais sobre a área de scripting. Vai ser bem básico, como muita gente tinha me pedido por pm (então resolvi fazer para acabar com o enjoo =P). Acredito que existam muitos tutoriais, alguns bons, outros não, e como vinham me pedindo, ou os tutoriais eram ruins, ou queriam uma visão de outra pessoa (quem sabe com outra pessoa falando, entenda melhor). Diante mão, vou logo dizendo que não me considero um bom scripter ou coisa perto disso até porque estou nisso há menos de 1 mês, mas vou tentar ajudar as pessoas com o pouco que sei.
Nessa primeira parte, vamos ver os seguintes pontos:
1. [LÓGICA DE PROGRAMAÇÃO]
1.1 O que é um algoritmo?
1.2 Um exemplo de algoritmo.
1.3 Exercício: Faça seu próprio algoritmo.
1. Desde que existe o ser humano, existe programação. Quando os homens da pré-história iam caçar, ele se programavam, decidiam quais passos tinham que seguir a fim de alcançar a caça. (hehe) Com o computador não é diferente, você deve dar os passos para que ele possa executar as ações e alcançar o objetivo, que no nosso caso, é o sucesso do script. Isso é a linguagem de programação, é uma linguagem criada para instruir o computador a realizar suas tarefas, e o programador deve seguir uma lógica para colocar cada parte do script no seu devido local, essa é a lógica de programação.
1.1 Algoritmo é nada mais que uma "receita" que deve ter os passos seguidos pelo computador para realizar uma tarefa. Esses passos não devem deixar o computador com dúvidas, e portanto, devem ser bem definidos e claros.
1.2 Vamos a um exemplo de um algoritmo. Algoritmo: Preparar um cafezinho
Geralmente, tomamos um cafezinho logo quando acordamos então a primeira coisa que devemos fazer é:
Acordar
Se não tiver água quente então
Colocar água na panela
Colocar a panela no fogão
Ligar o fogão
Esperar água ferver
Vejam que se esses passos acima forem seguidos rigorosamente, você vai conseguir por a água para ferver. Continuando...
Mas se já tiver água quente então
Botar água na xícara
Botar duas colheres de açúcar
Botar uma colher de café em pó
Mexer
Tomar
Dizer: Delíiiciaa =P
Vejam, que aí estão os passos exatos para preparar um cafezinho. Aliás, mais do que preparar, até tomar o café.
Como ficou o algoritmo:
1.3 Faça um algoritmo para: Ir à escola/faculdade (não precisa postar, é só para treinar).
2. [sCRIPTEANDO]
2.1 Arquivos de Base
2.2 Controladores Lógicos
- Condicionais
- Operadores de relação
- Operadores-controladores
2.3 Variáveis
2.4 Storage
Nessa parte, vamos começar a parte de script realmente. Lembrando que existem muitos tutoriais e só esse aqui não é o bastante, até por estar bem básico.
2.1 Os arquivos que podem dar auxílio na hora de fazer os seus scripts são:
-- Em data/lib (alguns, global.lua) encontre o arquivo: 000-constant.lua que dá muitas informações sobre o server, como por exemplo, id dos channels, id das skulls, tipos de mensagens, etc.. é bastante útil na construção dos scripts.
-- Ot script Live by Colex: Programa que facilita bastante pros iniciantes. Ele marca algumas funções em uma cor diferente além de executar o script para ver se há algum erro de escrita. Em alguns fórums tem, é só usar o sistema de busca.
-- Notepad++: Um editor de texto que também pode ser útil.
2.2 Os controladores lógicos são aqueles que colocarão em prática a sua lógica de programação. São eles que guiarão os passos que o computador deve seguir.
--- Condicionais
Acho que todos sabem o que é um condicional. Como o nome já diz, ele abre uma condição para que algo possa ser feito.
Exemplo: Caso não chova, irei jogar bola.
Então, isso é uma condição, a condição de que não esteja chuvendo. Se não chover eu jogo, se chover não jogo.
Na programação, os principais condicionais são:
if -- equivale ao se em português. Está presente em todas linguagens de programação. Provavelmente, você já o viu nas aulas de português. Ele abre uma condição. Regra: Todo if tem seu end.
else -- equivale ao senão. Vai ser executado caso a primeira condição aberta pelo if seja falsa.
elseif -- equivale a "senão se" ou "mas se". Ele evita a repetição de vários se. Não precisa de end, "utiliza" o end do if.
Construindo um algoritmo só para exemplificar:
Pegando o exemplo acima, vamos usar o elseif.
---- Operadores de relação
Os operadores de relação são aqueles que vocês estudam em matemática: igual, maior igual, menor igual...Em lua, é um pouco diferente:
igual: = menor igual: <=
maior igual: >= verificação: ==
Esse de verificação serve para checkar se algo é realmente igual. A diferença dele para o de igual "=" é que o igual serve para atribuir valores.
Exemplo: se o level do player == 100 então -- verifica se o level do player é realmente 100
--- Operadores controladores
Esses operadores são o and e o or que significa basicamente "e" e "ou", respectivamente. O and verifica se todas as condições são verdadeiras para executar algo.
Exemplo: se o player tem level 100 e o nome dele é Leoking então
execute script
fim
Perceba que só será executado caso a condição de ser lvl 100 e o nome ser Leo sejam respeitadas. No caso do or, é necessário que apenas uma delas seja respeitadas.
Exemplo: se o player tem level 100 ou o nome dele é Leo então
execute script
fim
Nesse caso, com somente uma condição sendo respeitada, já é o bastante para que o script seja executado.
2.3 Variáveis: Servem basicamente para guardarem valores.
Exemplo:
O script retornará: king -- king é exatamente o valor da variável var.
2.4 Storage: É simplesmente uma função que vai guardar um valor ou letra, palavra, etc.
Para dar um storage usamos a função: setPlayerStorageValue(cid, valor, novo valor)
Exemplo: setPlayerStorageValue(cid, 1234, 1)
Para verificar se um player tem um storage usamos a função: getPlayerStorageValue(cid, valor)
Exemplo: getPlayerStorageValue(cid, 1234)
Essas funções você pode ver naquele arquivo de base: lista de funções em lua
Agora a última parte desse mini tutorial:
3. [ACTIONS]
3.1 Sintaxe das actions
3.2 Exemplo de actions
3.1 A sintaxe das actions é: function onUse(cid, item, fromPosition, itemEx, toPosition) mas também podem ser encontradas como fromPos, toPos, isso vai depender de como o scripter queira e como vai usar no script. Usei essa que está em negrito, pois, já é a padrão. Agora a explicação:
function onUse(cid, item, fromPosition, itemEx, toPosition)
Primeramente, é bom lembrar que assim como o if, toda função (function) tem seu end.
Exemplo:
Explicação da sintaxe:
onUse = ao Usar (assim que o player use um item)
cid = creature id -- quem vai usar o item
item = item que será usado ou item "principal"
fromPosition = da Posição
itemEx = item "secundário"
toPosition = para a Posição
3.2 Vamos colocar em prática tudo que lemos até agora.
Nossa action fará:
[/center] [center]Ao dar use em um item --- para inserir comentários que não alterarão o script, é só colocar -- e escrever[/center] [center]Se o player for level maior ou igual a 100 então[/center] [center]Sumona um monstro em uma posição[/center] [center]Manda uma mensagem para o player[/center] [center]Manda um efeito no player[/center] [center]se não for level 100[/center] [center]Manda uma mensagem para o player[/center] [center]fim do script[/center] [center] [/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx) --- sintaxe das actions[/center] [center]if getPlayerLevel(cid) >= 100 then -- se o level do player é maior igual a 100 então[/center] [center]doSummonCreature("Demon", {x=1, y=1, z=1}) --- sumona um demon na posição determinada. Todo valor que seja uma letra, palavra deve estar entre aspas. A posição, entre chaves.[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.") -- manda uma mensagem do tipo 22 (veja no constant.lua)[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10) -- manda um efeito de id 10 (veja constant.lua) na posição do player[/center] [center]else -- se não[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end -- end do if[/center] [center]end -- end da função[/center] [center] Toda script deve ser registrado em um arquivo.xml, no caso da nossa action,será registrado no actions.xml e como é o item que será usado, usaremos itemid: <action itemid="IDDOITEM" event="script" value="NOMEDOARQUIVO.lua"/> Esse foi nosso script usando quase tudo que explicamos anteriormente. Vamos usar agora storage e variáveis nesse script. Vimos que variáveis podem guardar valores, seja númerico ou não. Então, podemos fazer com que não precisemos editar o monstro, a posição e o level dentro do script. (não vou explicar o que é uma variável local e global, pois é intuitivo -- se tiverem dúvidas procurem em outros tutoriais). Podemos colocar: --- Guardando os valores com variáveis --- local monster = "Demon" -- entre aspas, lembre-se! local pos = {x=1,y=1,z=1} -- entre chaves! local minlevel = 100 -- minimo de level Ok até aqui, então nosso script ficaria: [/center] [center]local monster = "Demon"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Mas, digamos que vou passar esse script para um amigo e ele não sabe nada de editar scripts. Aí você fala, é só colocar o nome do monstro no lugar do Demon. Ele vai e faz: [/center] [center]local monster = "Rotworm" --- olha aqui[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Ou seja, vai sumonar um rotworm mas vai mandar a mensagem: Você sumonou um Demon. Como resolver isso? Existe os strings, (não vou me aprofundar) vou dar um exemplo e mostrar como ficaria. Exemplo: local var = king imprima("Você quis dizer ".. var .."?) Retornaria: Você quis dizer king? Percebam que é só colocar ".. variavel .." . Além de resolver o problema do monster, também poderíamos fazer isso com o level, no nosso script ficaria: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end[/center] [center]end[/center] [center] Sendo assim, seu amigo noob só vai precisar editar na parte de cima do script. Adicionando storage ao script. Nesse caso, faremos com que o item só possa ser usado uma única vez. Para isso, daremos um storage a ele quando o item for usado e verificaremos se o player já tem esse storage para ver se poderá ser usado o item novamente ou não. (Leia a parte de storage) A função que verifica se o player tem storage é : getPlayerStorageValue(cid, value), então: [/center] [center]se o player tiver esse storage menor ou igual a 0 então[/center] [center]execute o script[/center] [center]dê a storage -- para que o player n possa usar novamente[/center] [center]se não --- se ele já não tiver storage menor ou igual a 0, ou seja, ja tiver usado o item[/center] [center]mande msg negando[/center] [center] No script ficaria assim: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerStorageValue(cid, 1234) <= 0 then -- se o storage 1234 for menor ou igual a zero entao[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]setPlayerStorageValue(cid, 1234,1) --- dar storage 1234 pra q n possa usar novamente[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end --- end do if do getPlayerLevel[/center] [center]else -- se já tiver storage igual a 1[/center] [center]doPlayerSendTextMessage(cid, 22, "Você já usou esse item.") -- manda a mensagem[/center] [center]end -- end do if getPlayerStorage...[/center] [center]end -- end da função[/center] [center]
Então é isso galera, tentei englobar o maior número de informações necessárias para vocês começarem a fazer seus scripts e espero que esse tutorial ajude alguém. É bom lembrar que só isso não basta e que é sempre bom olhar os scripts dos outros e pelo menos tentar entender como que foram feitos. Vlw aí, abraços.
Créditos: 100% Leo
PS: Não quero ninguém pegando o Tutorial e colocando em outro fórum se for colocar em outro fórum deixa que eu ou o Leo .
-
VictorFT recebeu reputação de Ryukiimaru em [Básico] Aprendendo Script---Tutorial by Leo ---
Bom galera, venho através desse tutorial tentar ajudar aqueles que querem aprender um pouco mais sobre a área de scripting. Vai ser bem básico, como muita gente tinha me pedido por pm (então resolvi fazer para acabar com o enjoo =P). Acredito que existam muitos tutoriais, alguns bons, outros não, e como vinham me pedindo, ou os tutoriais eram ruins, ou queriam uma visão de outra pessoa (quem sabe com outra pessoa falando, entenda melhor). Diante mão, vou logo dizendo que não me considero um bom scripter ou coisa perto disso até porque estou nisso há menos de 1 mês, mas vou tentar ajudar as pessoas com o pouco que sei.
Nessa primeira parte, vamos ver os seguintes pontos:
1. [LÓGICA DE PROGRAMAÇÃO]
1.1 O que é um algoritmo?
1.2 Um exemplo de algoritmo.
1.3 Exercício: Faça seu próprio algoritmo.
1. Desde que existe o ser humano, existe programação. Quando os homens da pré-história iam caçar, ele se programavam, decidiam quais passos tinham que seguir a fim de alcançar a caça. (hehe) Com o computador não é diferente, você deve dar os passos para que ele possa executar as ações e alcançar o objetivo, que no nosso caso, é o sucesso do script. Isso é a linguagem de programação, é uma linguagem criada para instruir o computador a realizar suas tarefas, e o programador deve seguir uma lógica para colocar cada parte do script no seu devido local, essa é a lógica de programação.
1.1 Algoritmo é nada mais que uma "receita" que deve ter os passos seguidos pelo computador para realizar uma tarefa. Esses passos não devem deixar o computador com dúvidas, e portanto, devem ser bem definidos e claros.
1.2 Vamos a um exemplo de um algoritmo. Algoritmo: Preparar um cafezinho
Geralmente, tomamos um cafezinho logo quando acordamos então a primeira coisa que devemos fazer é:
Acordar
Se não tiver água quente então
Colocar água na panela
Colocar a panela no fogão
Ligar o fogão
Esperar água ferver
Vejam que se esses passos acima forem seguidos rigorosamente, você vai conseguir por a água para ferver. Continuando...
Mas se já tiver água quente então
Botar água na xícara
Botar duas colheres de açúcar
Botar uma colher de café em pó
Mexer
Tomar
Dizer: Delíiiciaa =P
Vejam, que aí estão os passos exatos para preparar um cafezinho. Aliás, mais do que preparar, até tomar o café.
Como ficou o algoritmo:
1.3 Faça um algoritmo para: Ir à escola/faculdade (não precisa postar, é só para treinar).
2. [sCRIPTEANDO]
2.1 Arquivos de Base
2.2 Controladores Lógicos
- Condicionais
- Operadores de relação
- Operadores-controladores
2.3 Variáveis
2.4 Storage
Nessa parte, vamos começar a parte de script realmente. Lembrando que existem muitos tutoriais e só esse aqui não é o bastante, até por estar bem básico.
2.1 Os arquivos que podem dar auxílio na hora de fazer os seus scripts são:
-- Em data/lib (alguns, global.lua) encontre o arquivo: 000-constant.lua que dá muitas informações sobre o server, como por exemplo, id dos channels, id das skulls, tipos de mensagens, etc.. é bastante útil na construção dos scripts.
-- Ot script Live by Colex: Programa que facilita bastante pros iniciantes. Ele marca algumas funções em uma cor diferente além de executar o script para ver se há algum erro de escrita. Em alguns fórums tem, é só usar o sistema de busca.
-- Notepad++: Um editor de texto que também pode ser útil.
2.2 Os controladores lógicos são aqueles que colocarão em prática a sua lógica de programação. São eles que guiarão os passos que o computador deve seguir.
--- Condicionais
Acho que todos sabem o que é um condicional. Como o nome já diz, ele abre uma condição para que algo possa ser feito.
Exemplo: Caso não chova, irei jogar bola.
Então, isso é uma condição, a condição de que não esteja chuvendo. Se não chover eu jogo, se chover não jogo.
Na programação, os principais condicionais são:
if -- equivale ao se em português. Está presente em todas linguagens de programação. Provavelmente, você já o viu nas aulas de português. Ele abre uma condição. Regra: Todo if tem seu end.
else -- equivale ao senão. Vai ser executado caso a primeira condição aberta pelo if seja falsa.
elseif -- equivale a "senão se" ou "mas se". Ele evita a repetição de vários se. Não precisa de end, "utiliza" o end do if.
Construindo um algoritmo só para exemplificar:
Pegando o exemplo acima, vamos usar o elseif.
---- Operadores de relação
Os operadores de relação são aqueles que vocês estudam em matemática: igual, maior igual, menor igual...Em lua, é um pouco diferente:
igual: = menor igual: <=
maior igual: >= verificação: ==
Esse de verificação serve para checkar se algo é realmente igual. A diferença dele para o de igual "=" é que o igual serve para atribuir valores.
Exemplo: se o level do player == 100 então -- verifica se o level do player é realmente 100
--- Operadores controladores
Esses operadores são o and e o or que significa basicamente "e" e "ou", respectivamente. O and verifica se todas as condições são verdadeiras para executar algo.
Exemplo: se o player tem level 100 e o nome dele é Leoking então
execute script
fim
Perceba que só será executado caso a condição de ser lvl 100 e o nome ser Leo sejam respeitadas. No caso do or, é necessário que apenas uma delas seja respeitadas.
Exemplo: se o player tem level 100 ou o nome dele é Leo então
execute script
fim
Nesse caso, com somente uma condição sendo respeitada, já é o bastante para que o script seja executado.
2.3 Variáveis: Servem basicamente para guardarem valores.
Exemplo:
O script retornará: king -- king é exatamente o valor da variável var.
2.4 Storage: É simplesmente uma função que vai guardar um valor ou letra, palavra, etc.
Para dar um storage usamos a função: setPlayerStorageValue(cid, valor, novo valor)
Exemplo: setPlayerStorageValue(cid, 1234, 1)
Para verificar se um player tem um storage usamos a função: getPlayerStorageValue(cid, valor)
Exemplo: getPlayerStorageValue(cid, 1234)
Essas funções você pode ver naquele arquivo de base: lista de funções em lua
Agora a última parte desse mini tutorial:
3. [ACTIONS]
3.1 Sintaxe das actions
3.2 Exemplo de actions
3.1 A sintaxe das actions é: function onUse(cid, item, fromPosition, itemEx, toPosition) mas também podem ser encontradas como fromPos, toPos, isso vai depender de como o scripter queira e como vai usar no script. Usei essa que está em negrito, pois, já é a padrão. Agora a explicação:
function onUse(cid, item, fromPosition, itemEx, toPosition)
Primeramente, é bom lembrar que assim como o if, toda função (function) tem seu end.
Exemplo:
Explicação da sintaxe:
onUse = ao Usar (assim que o player use um item)
cid = creature id -- quem vai usar o item
item = item que será usado ou item "principal"
fromPosition = da Posição
itemEx = item "secundário"
toPosition = para a Posição
3.2 Vamos colocar em prática tudo que lemos até agora.
Nossa action fará:
[/center] [center]Ao dar use em um item --- para inserir comentários que não alterarão o script, é só colocar -- e escrever[/center] [center]Se o player for level maior ou igual a 100 então[/center] [center]Sumona um monstro em uma posição[/center] [center]Manda uma mensagem para o player[/center] [center]Manda um efeito no player[/center] [center]se não for level 100[/center] [center]Manda uma mensagem para o player[/center] [center]fim do script[/center] [center] [/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx) --- sintaxe das actions[/center] [center]if getPlayerLevel(cid) >= 100 then -- se o level do player é maior igual a 100 então[/center] [center]doSummonCreature("Demon", {x=1, y=1, z=1}) --- sumona um demon na posição determinada. Todo valor que seja uma letra, palavra deve estar entre aspas. A posição, entre chaves.[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.") -- manda uma mensagem do tipo 22 (veja no constant.lua)[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10) -- manda um efeito de id 10 (veja constant.lua) na posição do player[/center] [center]else -- se não[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end -- end do if[/center] [center]end -- end da função[/center] [center] Toda script deve ser registrado em um arquivo.xml, no caso da nossa action,será registrado no actions.xml e como é o item que será usado, usaremos itemid: <action itemid="IDDOITEM" event="script" value="NOMEDOARQUIVO.lua"/> Esse foi nosso script usando quase tudo que explicamos anteriormente. Vamos usar agora storage e variáveis nesse script. Vimos que variáveis podem guardar valores, seja númerico ou não. Então, podemos fazer com que não precisemos editar o monstro, a posição e o level dentro do script. (não vou explicar o que é uma variável local e global, pois é intuitivo -- se tiverem dúvidas procurem em outros tutoriais). Podemos colocar: --- Guardando os valores com variáveis --- local monster = "Demon" -- entre aspas, lembre-se! local pos = {x=1,y=1,z=1} -- entre chaves! local minlevel = 100 -- minimo de level Ok até aqui, então nosso script ficaria: [/center] [center]local monster = "Demon"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Mas, digamos que vou passar esse script para um amigo e ele não sabe nada de editar scripts. Aí você fala, é só colocar o nome do monstro no lugar do Demon. Ele vai e faz: [/center] [center]local monster = "Rotworm" --- olha aqui[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Ou seja, vai sumonar um rotworm mas vai mandar a mensagem: Você sumonou um Demon. Como resolver isso? Existe os strings, (não vou me aprofundar) vou dar um exemplo e mostrar como ficaria. Exemplo: local var = king imprima("Você quis dizer ".. var .."?) Retornaria: Você quis dizer king? Percebam que é só colocar ".. variavel .." . Além de resolver o problema do monster, também poderíamos fazer isso com o level, no nosso script ficaria: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end[/center] [center]end[/center] [center] Sendo assim, seu amigo noob só vai precisar editar na parte de cima do script. Adicionando storage ao script. Nesse caso, faremos com que o item só possa ser usado uma única vez. Para isso, daremos um storage a ele quando o item for usado e verificaremos se o player já tem esse storage para ver se poderá ser usado o item novamente ou não. (Leia a parte de storage) A função que verifica se o player tem storage é : getPlayerStorageValue(cid, value), então: [/center] [center]se o player tiver esse storage menor ou igual a 0 então[/center] [center]execute o script[/center] [center]dê a storage -- para que o player n possa usar novamente[/center] [center]se não --- se ele já não tiver storage menor ou igual a 0, ou seja, ja tiver usado o item[/center] [center]mande msg negando[/center] [center] No script ficaria assim: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerStorageValue(cid, 1234) <= 0 then -- se o storage 1234 for menor ou igual a zero entao[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]setPlayerStorageValue(cid, 1234,1) --- dar storage 1234 pra q n possa usar novamente[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end --- end do if do getPlayerLevel[/center] [center]else -- se já tiver storage igual a 1[/center] [center]doPlayerSendTextMessage(cid, 22, "Você já usou esse item.") -- manda a mensagem[/center] [center]end -- end do if getPlayerStorage...[/center] [center]end -- end da função[/center] [center]
Então é isso galera, tentei englobar o maior número de informações necessárias para vocês começarem a fazer seus scripts e espero que esse tutorial ajude alguém. É bom lembrar que só isso não basta e que é sempre bom olhar os scripts dos outros e pelo menos tentar entender como que foram feitos. Vlw aí, abraços.
Créditos: 100% Leo
PS: Não quero ninguém pegando o Tutorial e colocando em outro fórum se for colocar em outro fórum deixa que eu ou o Leo .
-
VictorFT recebeu reputação de Leolongo em [Ajuda] Hotkey Kngiht - Exori GranEntão irei te explicar uma coisa é meio arriscado , botar para seu personagem soltar Exori Gran sozinho , mas se você quer irei ensinar...
Abra a janela Targeting do seu ElfBot , logo em seguida em Name bote o nome do bixo que ele irá soltar Magia , um exemplo seria Dragon Lord , vamos supor ...
Em HP% Range Bote no primeiro Quadrado : 100 e no segundo deixe " 0 "
Em Desired Action Bote no primeiro Quadrado : "Attack" e no segundo tente Botar "FBESERK"
No Attack Mode Bote :Chase/offensive (para seguir o Bixo)
Nos últimos quadrados do canto esquerdo , marque as 4 opções . Pronto agora seu ElfBot vai dar Exori Gran nos bixos )
-
VictorFT recebeu reputação de 1uri em [Básico] Aprendendo Script---Tutorial by Leo ---
Bom galera, venho através desse tutorial tentar ajudar aqueles que querem aprender um pouco mais sobre a área de scripting. Vai ser bem básico, como muita gente tinha me pedido por pm (então resolvi fazer para acabar com o enjoo =P). Acredito que existam muitos tutoriais, alguns bons, outros não, e como vinham me pedindo, ou os tutoriais eram ruins, ou queriam uma visão de outra pessoa (quem sabe com outra pessoa falando, entenda melhor). Diante mão, vou logo dizendo que não me considero um bom scripter ou coisa perto disso até porque estou nisso há menos de 1 mês, mas vou tentar ajudar as pessoas com o pouco que sei.
Nessa primeira parte, vamos ver os seguintes pontos:
1. [LÓGICA DE PROGRAMAÇÃO]
1.1 O que é um algoritmo?
1.2 Um exemplo de algoritmo.
1.3 Exercício: Faça seu próprio algoritmo.
1. Desde que existe o ser humano, existe programação. Quando os homens da pré-história iam caçar, ele se programavam, decidiam quais passos tinham que seguir a fim de alcançar a caça. (hehe) Com o computador não é diferente, você deve dar os passos para que ele possa executar as ações e alcançar o objetivo, que no nosso caso, é o sucesso do script. Isso é a linguagem de programação, é uma linguagem criada para instruir o computador a realizar suas tarefas, e o programador deve seguir uma lógica para colocar cada parte do script no seu devido local, essa é a lógica de programação.
1.1 Algoritmo é nada mais que uma "receita" que deve ter os passos seguidos pelo computador para realizar uma tarefa. Esses passos não devem deixar o computador com dúvidas, e portanto, devem ser bem definidos e claros.
1.2 Vamos a um exemplo de um algoritmo. Algoritmo: Preparar um cafezinho
Geralmente, tomamos um cafezinho logo quando acordamos então a primeira coisa que devemos fazer é:
Acordar
Se não tiver água quente então
Colocar água na panela
Colocar a panela no fogão
Ligar o fogão
Esperar água ferver
Vejam que se esses passos acima forem seguidos rigorosamente, você vai conseguir por a água para ferver. Continuando...
Mas se já tiver água quente então
Botar água na xícara
Botar duas colheres de açúcar
Botar uma colher de café em pó
Mexer
Tomar
Dizer: Delíiiciaa =P
Vejam, que aí estão os passos exatos para preparar um cafezinho. Aliás, mais do que preparar, até tomar o café.
Como ficou o algoritmo:
1.3 Faça um algoritmo para: Ir à escola/faculdade (não precisa postar, é só para treinar).
2. [sCRIPTEANDO]
2.1 Arquivos de Base
2.2 Controladores Lógicos
- Condicionais
- Operadores de relação
- Operadores-controladores
2.3 Variáveis
2.4 Storage
Nessa parte, vamos começar a parte de script realmente. Lembrando que existem muitos tutoriais e só esse aqui não é o bastante, até por estar bem básico.
2.1 Os arquivos que podem dar auxílio na hora de fazer os seus scripts são:
-- Em data/lib (alguns, global.lua) encontre o arquivo: 000-constant.lua que dá muitas informações sobre o server, como por exemplo, id dos channels, id das skulls, tipos de mensagens, etc.. é bastante útil na construção dos scripts.
-- Ot script Live by Colex: Programa que facilita bastante pros iniciantes. Ele marca algumas funções em uma cor diferente além de executar o script para ver se há algum erro de escrita. Em alguns fórums tem, é só usar o sistema de busca.
-- Notepad++: Um editor de texto que também pode ser útil.
2.2 Os controladores lógicos são aqueles que colocarão em prática a sua lógica de programação. São eles que guiarão os passos que o computador deve seguir.
--- Condicionais
Acho que todos sabem o que é um condicional. Como o nome já diz, ele abre uma condição para que algo possa ser feito.
Exemplo: Caso não chova, irei jogar bola.
Então, isso é uma condição, a condição de que não esteja chuvendo. Se não chover eu jogo, se chover não jogo.
Na programação, os principais condicionais são:
if -- equivale ao se em português. Está presente em todas linguagens de programação. Provavelmente, você já o viu nas aulas de português. Ele abre uma condição. Regra: Todo if tem seu end.
else -- equivale ao senão. Vai ser executado caso a primeira condição aberta pelo if seja falsa.
elseif -- equivale a "senão se" ou "mas se". Ele evita a repetição de vários se. Não precisa de end, "utiliza" o end do if.
Construindo um algoritmo só para exemplificar:
Pegando o exemplo acima, vamos usar o elseif.
---- Operadores de relação
Os operadores de relação são aqueles que vocês estudam em matemática: igual, maior igual, menor igual...Em lua, é um pouco diferente:
igual: = menor igual: <=
maior igual: >= verificação: ==
Esse de verificação serve para checkar se algo é realmente igual. A diferença dele para o de igual "=" é que o igual serve para atribuir valores.
Exemplo: se o level do player == 100 então -- verifica se o level do player é realmente 100
--- Operadores controladores
Esses operadores são o and e o or que significa basicamente "e" e "ou", respectivamente. O and verifica se todas as condições são verdadeiras para executar algo.
Exemplo: se o player tem level 100 e o nome dele é Leoking então
execute script
fim
Perceba que só será executado caso a condição de ser lvl 100 e o nome ser Leo sejam respeitadas. No caso do or, é necessário que apenas uma delas seja respeitadas.
Exemplo: se o player tem level 100 ou o nome dele é Leo então
execute script
fim
Nesse caso, com somente uma condição sendo respeitada, já é o bastante para que o script seja executado.
2.3 Variáveis: Servem basicamente para guardarem valores.
Exemplo:
O script retornará: king -- king é exatamente o valor da variável var.
2.4 Storage: É simplesmente uma função que vai guardar um valor ou letra, palavra, etc.
Para dar um storage usamos a função: setPlayerStorageValue(cid, valor, novo valor)
Exemplo: setPlayerStorageValue(cid, 1234, 1)
Para verificar se um player tem um storage usamos a função: getPlayerStorageValue(cid, valor)
Exemplo: getPlayerStorageValue(cid, 1234)
Essas funções você pode ver naquele arquivo de base: lista de funções em lua
Agora a última parte desse mini tutorial:
3. [ACTIONS]
3.1 Sintaxe das actions
3.2 Exemplo de actions
3.1 A sintaxe das actions é: function onUse(cid, item, fromPosition, itemEx, toPosition) mas também podem ser encontradas como fromPos, toPos, isso vai depender de como o scripter queira e como vai usar no script. Usei essa que está em negrito, pois, já é a padrão. Agora a explicação:
function onUse(cid, item, fromPosition, itemEx, toPosition)
Primeramente, é bom lembrar que assim como o if, toda função (function) tem seu end.
Exemplo:
Explicação da sintaxe:
onUse = ao Usar (assim que o player use um item)
cid = creature id -- quem vai usar o item
item = item que será usado ou item "principal"
fromPosition = da Posição
itemEx = item "secundário"
toPosition = para a Posição
3.2 Vamos colocar em prática tudo que lemos até agora.
Nossa action fará:
[/center] [center]Ao dar use em um item --- para inserir comentários que não alterarão o script, é só colocar -- e escrever[/center] [center]Se o player for level maior ou igual a 100 então[/center] [center]Sumona um monstro em uma posição[/center] [center]Manda uma mensagem para o player[/center] [center]Manda um efeito no player[/center] [center]se não for level 100[/center] [center]Manda uma mensagem para o player[/center] [center]fim do script[/center] [center] [/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx) --- sintaxe das actions[/center] [center]if getPlayerLevel(cid) >= 100 then -- se o level do player é maior igual a 100 então[/center] [center]doSummonCreature("Demon", {x=1, y=1, z=1}) --- sumona um demon na posição determinada. Todo valor que seja uma letra, palavra deve estar entre aspas. A posição, entre chaves.[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.") -- manda uma mensagem do tipo 22 (veja no constant.lua)[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10) -- manda um efeito de id 10 (veja constant.lua) na posição do player[/center] [center]else -- se não[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end -- end do if[/center] [center]end -- end da função[/center] [center] Toda script deve ser registrado em um arquivo.xml, no caso da nossa action,será registrado no actions.xml e como é o item que será usado, usaremos itemid: <action itemid="IDDOITEM" event="script" value="NOMEDOARQUIVO.lua"/> Esse foi nosso script usando quase tudo que explicamos anteriormente. Vamos usar agora storage e variáveis nesse script. Vimos que variáveis podem guardar valores, seja númerico ou não. Então, podemos fazer com que não precisemos editar o monstro, a posição e o level dentro do script. (não vou explicar o que é uma variável local e global, pois é intuitivo -- se tiverem dúvidas procurem em outros tutoriais). Podemos colocar: --- Guardando os valores com variáveis --- local monster = "Demon" -- entre aspas, lembre-se! local pos = {x=1,y=1,z=1} -- entre chaves! local minlevel = 100 -- minimo de level Ok até aqui, então nosso script ficaria: [/center] [center]local monster = "Demon"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Mas, digamos que vou passar esse script para um amigo e ele não sabe nada de editar scripts. Aí você fala, é só colocar o nome do monstro no lugar do Demon. Ele vai e faz: [/center] [center]local monster = "Rotworm" --- olha aqui[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Ou seja, vai sumonar um rotworm mas vai mandar a mensagem: Você sumonou um Demon. Como resolver isso? Existe os strings, (não vou me aprofundar) vou dar um exemplo e mostrar como ficaria. Exemplo: local var = king imprima("Você quis dizer ".. var .."?) Retornaria: Você quis dizer king? Percebam que é só colocar ".. variavel .." . Além de resolver o problema do monster, também poderíamos fazer isso com o level, no nosso script ficaria: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end[/center] [center]end[/center] [center] Sendo assim, seu amigo noob só vai precisar editar na parte de cima do script. Adicionando storage ao script. Nesse caso, faremos com que o item só possa ser usado uma única vez. Para isso, daremos um storage a ele quando o item for usado e verificaremos se o player já tem esse storage para ver se poderá ser usado o item novamente ou não. (Leia a parte de storage) A função que verifica se o player tem storage é : getPlayerStorageValue(cid, value), então: [/center] [center]se o player tiver esse storage menor ou igual a 0 então[/center] [center]execute o script[/center] [center]dê a storage -- para que o player n possa usar novamente[/center] [center]se não --- se ele já não tiver storage menor ou igual a 0, ou seja, ja tiver usado o item[/center] [center]mande msg negando[/center] [center] No script ficaria assim: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerStorageValue(cid, 1234) <= 0 then -- se o storage 1234 for menor ou igual a zero entao[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]setPlayerStorageValue(cid, 1234,1) --- dar storage 1234 pra q n possa usar novamente[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end --- end do if do getPlayerLevel[/center] [center]else -- se já tiver storage igual a 1[/center] [center]doPlayerSendTextMessage(cid, 22, "Você já usou esse item.") -- manda a mensagem[/center] [center]end -- end do if getPlayerStorage...[/center] [center]end -- end da função[/center] [center]
Então é isso galera, tentei englobar o maior número de informações necessárias para vocês começarem a fazer seus scripts e espero que esse tutorial ajude alguém. É bom lembrar que só isso não basta e que é sempre bom olhar os scripts dos outros e pelo menos tentar entender como que foram feitos. Vlw aí, abraços.
Créditos: 100% Leo
PS: Não quero ninguém pegando o Tutorial e colocando em outro fórum se for colocar em outro fórum deixa que eu ou o Leo .
-
VictorFT recebeu reputação de gueguexjoga em Galera como crio items vip?Fiz o Script da Crystal Arrow e aqui está
<item id="2352" article="a" name="NOME DA ARROW"> <attribute key="weight" value="200" /> <attribute key="attack" value="VALOR DO ATAQUE" /> <attribute key="HitChance" value="100"/> <attribute key="weaponType" value="distance" /> <attribute key="shootType" value="shiverarrow" /> <attribute key="range" value="10" /> <attribute key="breakChance" value="0" /> <attribute key="ammoAction" value="moveback" /> </item> Configurações: Agora a Wand Estilo Holy <item id="Id da wand desejada" article="a" name="Nome Da Wand"> <attribute key="weight" value="3800" /> <attribute key="shootType" value="holy" /> <attribute key="range" value="4" /> <attribute key="weaponType" value="wand" /> <attribute key="magiclevelpoints" value="DEPENDE SE VOCÊ QUISER" /> </item> Configurações: <item id="7424" article="a" name="Nome Da Wand"> <attribute key="weight" value="3800" /> <attribute key="shootType" value="holy" /> <attribute key="range" value="4" /> <attribute key="weaponType" value="wand" /> </item> Agora vá em Weapons e abra Weapons.xml <wand id="ID" level="7" mana="2" min="8" max="18" type="holy" event="function" value="default"> <!-- Nome da Wand --> <vocation id="1"/> <vocation id="2"/> </wand>
Configurações:
Obrigado Se Gostou da REP+
-
VictorFT recebeu reputação de Hadagalberto Jr. em [Básico] Aprendendo Script---Tutorial by Leo ---
Bom galera, venho através desse tutorial tentar ajudar aqueles que querem aprender um pouco mais sobre a área de scripting. Vai ser bem básico, como muita gente tinha me pedido por pm (então resolvi fazer para acabar com o enjoo =P). Acredito que existam muitos tutoriais, alguns bons, outros não, e como vinham me pedindo, ou os tutoriais eram ruins, ou queriam uma visão de outra pessoa (quem sabe com outra pessoa falando, entenda melhor). Diante mão, vou logo dizendo que não me considero um bom scripter ou coisa perto disso até porque estou nisso há menos de 1 mês, mas vou tentar ajudar as pessoas com o pouco que sei.
Nessa primeira parte, vamos ver os seguintes pontos:
1. [LÓGICA DE PROGRAMAÇÃO]
1.1 O que é um algoritmo?
1.2 Um exemplo de algoritmo.
1.3 Exercício: Faça seu próprio algoritmo.
1. Desde que existe o ser humano, existe programação. Quando os homens da pré-história iam caçar, ele se programavam, decidiam quais passos tinham que seguir a fim de alcançar a caça. (hehe) Com o computador não é diferente, você deve dar os passos para que ele possa executar as ações e alcançar o objetivo, que no nosso caso, é o sucesso do script. Isso é a linguagem de programação, é uma linguagem criada para instruir o computador a realizar suas tarefas, e o programador deve seguir uma lógica para colocar cada parte do script no seu devido local, essa é a lógica de programação.
1.1 Algoritmo é nada mais que uma "receita" que deve ter os passos seguidos pelo computador para realizar uma tarefa. Esses passos não devem deixar o computador com dúvidas, e portanto, devem ser bem definidos e claros.
1.2 Vamos a um exemplo de um algoritmo. Algoritmo: Preparar um cafezinho
Geralmente, tomamos um cafezinho logo quando acordamos então a primeira coisa que devemos fazer é:
Acordar
Se não tiver água quente então
Colocar água na panela
Colocar a panela no fogão
Ligar o fogão
Esperar água ferver
Vejam que se esses passos acima forem seguidos rigorosamente, você vai conseguir por a água para ferver. Continuando...
Mas se já tiver água quente então
Botar água na xícara
Botar duas colheres de açúcar
Botar uma colher de café em pó
Mexer
Tomar
Dizer: Delíiiciaa =P
Vejam, que aí estão os passos exatos para preparar um cafezinho. Aliás, mais do que preparar, até tomar o café.
Como ficou o algoritmo:
1.3 Faça um algoritmo para: Ir à escola/faculdade (não precisa postar, é só para treinar).
2. [sCRIPTEANDO]
2.1 Arquivos de Base
2.2 Controladores Lógicos
- Condicionais
- Operadores de relação
- Operadores-controladores
2.3 Variáveis
2.4 Storage
Nessa parte, vamos começar a parte de script realmente. Lembrando que existem muitos tutoriais e só esse aqui não é o bastante, até por estar bem básico.
2.1 Os arquivos que podem dar auxílio na hora de fazer os seus scripts são:
-- Em data/lib (alguns, global.lua) encontre o arquivo: 000-constant.lua que dá muitas informações sobre o server, como por exemplo, id dos channels, id das skulls, tipos de mensagens, etc.. é bastante útil na construção dos scripts.
-- Ot script Live by Colex: Programa que facilita bastante pros iniciantes. Ele marca algumas funções em uma cor diferente além de executar o script para ver se há algum erro de escrita. Em alguns fórums tem, é só usar o sistema de busca.
-- Notepad++: Um editor de texto que também pode ser útil.
2.2 Os controladores lógicos são aqueles que colocarão em prática a sua lógica de programação. São eles que guiarão os passos que o computador deve seguir.
--- Condicionais
Acho que todos sabem o que é um condicional. Como o nome já diz, ele abre uma condição para que algo possa ser feito.
Exemplo: Caso não chova, irei jogar bola.
Então, isso é uma condição, a condição de que não esteja chuvendo. Se não chover eu jogo, se chover não jogo.
Na programação, os principais condicionais são:
if -- equivale ao se em português. Está presente em todas linguagens de programação. Provavelmente, você já o viu nas aulas de português. Ele abre uma condição. Regra: Todo if tem seu end.
else -- equivale ao senão. Vai ser executado caso a primeira condição aberta pelo if seja falsa.
elseif -- equivale a "senão se" ou "mas se". Ele evita a repetição de vários se. Não precisa de end, "utiliza" o end do if.
Construindo um algoritmo só para exemplificar:
Pegando o exemplo acima, vamos usar o elseif.
---- Operadores de relação
Os operadores de relação são aqueles que vocês estudam em matemática: igual, maior igual, menor igual...Em lua, é um pouco diferente:
igual: = menor igual: <=
maior igual: >= verificação: ==
Esse de verificação serve para checkar se algo é realmente igual. A diferença dele para o de igual "=" é que o igual serve para atribuir valores.
Exemplo: se o level do player == 100 então -- verifica se o level do player é realmente 100
--- Operadores controladores
Esses operadores são o and e o or que significa basicamente "e" e "ou", respectivamente. O and verifica se todas as condições são verdadeiras para executar algo.
Exemplo: se o player tem level 100 e o nome dele é Leoking então
execute script
fim
Perceba que só será executado caso a condição de ser lvl 100 e o nome ser Leo sejam respeitadas. No caso do or, é necessário que apenas uma delas seja respeitadas.
Exemplo: se o player tem level 100 ou o nome dele é Leo então
execute script
fim
Nesse caso, com somente uma condição sendo respeitada, já é o bastante para que o script seja executado.
2.3 Variáveis: Servem basicamente para guardarem valores.
Exemplo:
O script retornará: king -- king é exatamente o valor da variável var.
2.4 Storage: É simplesmente uma função que vai guardar um valor ou letra, palavra, etc.
Para dar um storage usamos a função: setPlayerStorageValue(cid, valor, novo valor)
Exemplo: setPlayerStorageValue(cid, 1234, 1)
Para verificar se um player tem um storage usamos a função: getPlayerStorageValue(cid, valor)
Exemplo: getPlayerStorageValue(cid, 1234)
Essas funções você pode ver naquele arquivo de base: lista de funções em lua
Agora a última parte desse mini tutorial:
3. [ACTIONS]
3.1 Sintaxe das actions
3.2 Exemplo de actions
3.1 A sintaxe das actions é: function onUse(cid, item, fromPosition, itemEx, toPosition) mas também podem ser encontradas como fromPos, toPos, isso vai depender de como o scripter queira e como vai usar no script. Usei essa que está em negrito, pois, já é a padrão. Agora a explicação:
function onUse(cid, item, fromPosition, itemEx, toPosition)
Primeramente, é bom lembrar que assim como o if, toda função (function) tem seu end.
Exemplo:
Explicação da sintaxe:
onUse = ao Usar (assim que o player use um item)
cid = creature id -- quem vai usar o item
item = item que será usado ou item "principal"
fromPosition = da Posição
itemEx = item "secundário"
toPosition = para a Posição
3.2 Vamos colocar em prática tudo que lemos até agora.
Nossa action fará:
[/center] [center]Ao dar use em um item --- para inserir comentários que não alterarão o script, é só colocar -- e escrever[/center] [center]Se o player for level maior ou igual a 100 então[/center] [center]Sumona um monstro em uma posição[/center] [center]Manda uma mensagem para o player[/center] [center]Manda um efeito no player[/center] [center]se não for level 100[/center] [center]Manda uma mensagem para o player[/center] [center]fim do script[/center] [center] [/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx) --- sintaxe das actions[/center] [center]if getPlayerLevel(cid) >= 100 then -- se o level do player é maior igual a 100 então[/center] [center]doSummonCreature("Demon", {x=1, y=1, z=1}) --- sumona um demon na posição determinada. Todo valor que seja uma letra, palavra deve estar entre aspas. A posição, entre chaves.[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.") -- manda uma mensagem do tipo 22 (veja no constant.lua)[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10) -- manda um efeito de id 10 (veja constant.lua) na posição do player[/center] [center]else -- se não[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end -- end do if[/center] [center]end -- end da função[/center] [center] Toda script deve ser registrado em um arquivo.xml, no caso da nossa action,será registrado no actions.xml e como é o item que será usado, usaremos itemid: <action itemid="IDDOITEM" event="script" value="NOMEDOARQUIVO.lua"/> Esse foi nosso script usando quase tudo que explicamos anteriormente. Vamos usar agora storage e variáveis nesse script. Vimos que variáveis podem guardar valores, seja númerico ou não. Então, podemos fazer com que não precisemos editar o monstro, a posição e o level dentro do script. (não vou explicar o que é uma variável local e global, pois é intuitivo -- se tiverem dúvidas procurem em outros tutoriais). Podemos colocar: --- Guardando os valores com variáveis --- local monster = "Demon" -- entre aspas, lembre-se! local pos = {x=1,y=1,z=1} -- entre chaves! local minlevel = 100 -- minimo de level Ok até aqui, então nosso script ficaria: [/center] [center]local monster = "Demon"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Mas, digamos que vou passar esse script para um amigo e ele não sabe nada de editar scripts. Aí você fala, é só colocar o nome do monstro no lugar do Demon. Ele vai e faz: [/center] [center]local monster = "Rotworm" --- olha aqui[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um Demon.")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level 100.")[/center] [center]end[/center] [center]end[/center] [center] Ou seja, vai sumonar um rotworm mas vai mandar a mensagem: Você sumonou um Demon. Como resolver isso? Existe os strings, (não vou me aprofundar) vou dar um exemplo e mostrar como ficaria. Exemplo: local var = king imprima("Você quis dizer ".. var .."?) Retornaria: Você quis dizer king? Percebam que é só colocar ".. variavel .." . Além de resolver o problema do monster, também poderíamos fazer isso com o level, no nosso script ficaria: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end[/center] [center]end[/center] [center] Sendo assim, seu amigo noob só vai precisar editar na parte de cima do script. Adicionando storage ao script. Nesse caso, faremos com que o item só possa ser usado uma única vez. Para isso, daremos um storage a ele quando o item for usado e verificaremos se o player já tem esse storage para ver se poderá ser usado o item novamente ou não. (Leia a parte de storage) A função que verifica se o player tem storage é : getPlayerStorageValue(cid, value), então: [/center] [center]se o player tiver esse storage menor ou igual a 0 então[/center] [center]execute o script[/center] [center]dê a storage -- para que o player n possa usar novamente[/center] [center]se não --- se ele já não tiver storage menor ou igual a 0, ou seja, ja tiver usado o item[/center] [center]mande msg negando[/center] [center] No script ficaria assim: [/center] [center]local monster = "Rotworm"[/center] [center]local pos = {x=1,y=1,z=1}[/center] [center]local minlevel = 100[/center] [center]function onUse(cid, item, fromPosition, toPosition, itemEx)[/center] [center]if getPlayerStorageValue(cid, 1234) <= 0 then -- se o storage 1234 for menor ou igual a zero entao[/center] [center]if getPlayerLevel(cid) >= minlevel then[/center] [center]doSummonCreature(monster, pos)[/center] [center]doPlayerSendTextMessage(cid, 22, "Você sumonou um "..monster..".")[/center] [center]doSendMagicEffect(getPlayerPosition(cid), 10)[/center] [center]setPlayerStorageValue(cid, 1234,1) --- dar storage 1234 pra q n possa usar novamente[/center] [center]else[/center] [center]doPlayerSendTextMessage(cid, 22, "Você não tem level "..minlevel..".")[/center] [center]end --- end do if do getPlayerLevel[/center] [center]else -- se já tiver storage igual a 1[/center] [center]doPlayerSendTextMessage(cid, 22, "Você já usou esse item.") -- manda a mensagem[/center] [center]end -- end do if getPlayerStorage...[/center] [center]end -- end da função[/center] [center]
Então é isso galera, tentei englobar o maior número de informações necessárias para vocês começarem a fazer seus scripts e espero que esse tutorial ajude alguém. É bom lembrar que só isso não basta e que é sempre bom olhar os scripts dos outros e pelo menos tentar entender como que foram feitos. Vlw aí, abraços.
Créditos: 100% Leo
PS: Não quero ninguém pegando o Tutorial e colocando em outro fórum se for colocar em outro fórum deixa que eu ou o Leo .
-
VictorFT recebeu reputação de mini45 em • Guia de Cidades(Imagem feita pela AnneMotta)
• Eai pessoal, Tudo Bom? Hoje estava com vontade de fazer um Tutorial , mas não sabia de que.Praticamente não é um Tutorial ,é um Guia que irá te ajudar a como Criar sua Própria city. Você quer criar um mapa próprio?Primeiramente , tenha 'Segurança' saiba oque agradará e oque não agradaria os jogadores.Os Jogadores querem se sentir 'confortáveis' , então você precisa fazer algo Bacana.
• Templos
O Templo é definitivo, você pode fazer um Templo Medieval, mas realmente não precisa ser só de um estilo.Victor Como Assim, não precisa ser só de um Estilo?O Templo pode ter Nature, você pode por o templo no meio do Nada, para dar impressão que ele chegou perdido e não sabe (mais para mapas próprios).
Agora voltando no Templo com nature , não importa o Lugar.
• O templo pode ser em cima de uma Montanha , pode ser no 'Inferno', local de gelo, Pode ser em um Oasis.É com você o templo. Agora vou dar um Exemplo de Templo com Nature.
Feito por Alissow.
Vital900
Exemplo AnneMotta
Sinceramente eu adoro esse Templo, acho legal o mais legal é porque ele é variado.É raro você encontrar um Templo assim. O Templo também pode ter Cachoeira, pode estar embaixo de uma cachoeira e esta cachoeira chegue até ele, se for fazer isto faça algo Coerente. Não algo sem Sentido,porque tudo que precisamos é de um Templo.Mas tenha criatividade no seu Templo pois é uma Rotina, quando o Player nascer ele vai nascer neste lugar.
A Importância do Templo é muito Grande, sempre veja se está legal ou não está.Pergunte para Amigos se eles Gostam ou não,o mais legal de um Templo são seus Detalhes.Então faça algo confortável.
• Ruas
Ruas são locais onde o Jogador fará seu comércio, então ele sempre irá dar uma passada por lá depois de voltar da sua Aventura, passará para comprar coisas, vender também.Faça uma coisa agradável não precisa ser tão grande, pode ser pequeno mas tem que ser detalhado.City pequena,rua pequena,City grande rua grande.Então você primeiramente faça algo Agradável, primeiro com o Ground ,depois fazendo detalhes e depois faça as Casas de comércio.Não precisa ser diferente.Mas cade cidade tem um 'tema'.
Exemplo de Rua
Feita pelo Left.
Uma rua bem simples ,mais é bem detalhada como podem ver ,é agradável em duas partes.Na Construção e na Nature.
Para fazer uma Rua , você tem que fazer oque está na sua cabeça para deixa-la agradável, Uma rua pode ter até cachoeira se você quiser , pode ter oque você quiser contanto que seja Agradável e bonita.Como eu disse está rua não está grande mas está muito bem Detalhada e agradável.Então faça mais o menos desse estilo ou como desejar.
• Depot
Muito importante na parte de Seu mapa onde os players , irão guardar sues pertences e quando estiverem com Cap totalmente ocupada vão guardar seus itens, Depot precisa de Npc's que vendam Parcel, se quiser adicione O Banker nele.O Depot seguirá sempre o Estilo de sua City, se sua City for estilo Desert o Depot obviamente será estilo Desert, Sua City for perdida o seu Depot vai ter estilo de local abandonado,sujo e destruído.Depot é legal fazer desde que tenha um estilo bom , um formato agradável.
Exemplo LordZezim
Depot é um local bonito como vocês podem ver este está excelente variado na montanha , cachoeira logo em seguida detalhamento incrível.
Está lindo este Depot , formato perfeito.
• Fortaleza
Forteza é um local onde protege a Cidade, a fortaleza é um local onde será uma defesa contra ataques na sua cidade, ela também irá seguir o Rumo de sua cidade , sua cidade é no estilo Stone sua Fortaleza vai ser feita de Stone, se sua cidade for no Estilo de Deserto ela vai ser estilo deserto , faça uma fortaleza onde os jogadores possam sair da Cidade, para ir até suas Hunt's .Faça uma Fortaleza legal variando no formato não deixe muito reta. Faça algo coerente, um telhado bonito etc.
Exemplo VictorFT
A Fortaleza está realmente agradável variada nos detalhes , está bonita e bem jogável.Se perceberem logo em seguida tem uma hunt pode ser uma 'Hunt Principal'.
Dica: Adicione Stone's no chão e sangue, para mostrar que guerreiros passaram por ai, água para mostrar que é suor pois deserto é um local muito quente.
• Loja
Loja é um local onde o jogador fará a sua rotina,ele irá comprar itens,venderá itens.Se lembram quando eu falei sobre as Ruas? Então bote as Lojas nas ruas, as lojas podem ser de Knight, Paladin, Mago, para vender itens.Você pode fazer do estilo que quiser , Um dia o Vital900 me explicou que cada cidade pode ter o Padrão de telhado se você usa um estilo de telhado, você usará nas outras construções da mesma cidade.Loja pode ser um local agradável.Pode ter nature, etc. É igual Depot ,se sua city é abandonada sua loja será abandonada, e por ai vai.
Exemplos de Lojas (VictorFT,TecBreakerByLipe/Kyoran)
VictorFT
TecBreakerByLipe/Kyoran
• Caves And Nature
Nesta etapa final irei explicar cave primeiro.
Primeiramente , cave é quase oque defini um Mapa cave tem que ser algo agradável , não algo que os players não gostem , não quero desrespeitar quem gosta de Baiak, Mas pelo amor de Deus as caves de Baiak são mal feitas. Cave é um local onde o player fará uma Rotina até um certo level.Então você fala assim "Bobagem pra mim cave o importante é que upa", Certamente você está certo, mas e ai a questão é , o seu mapa é próprio você vai querer fazer uma cave que tem intenção 'só de upar' ou quer uma cave legal e ao mesmo tempo com a mesma intenção (de upar)?Você que escolhe , se você quiser que só upe, cara... esse tópico não vai te ajudar mas da uma olhada pra eu te converter e se você quer uma Cave que seja legal e agradável continue lendo.Muitas pessoas tem Mania de usar Auto B. em cave isso é Ruim , pois estraga sua Hunt, Raw é como se você tivesse mais liberdade mas demora, no Raw você pode por Objetos onde quiser , e com AB você não tem a mesma Liberdade.
Exemplo VictorFT:
Agora irei explicar sobre Nature é um local bonito , onde possui várias plantas, cachoeira e etc. A Nature é denominada de Natureza tem que ter bastante vida pode estar em qualquer lugar do seu mapa , como no templo (expliquei isto no início do tópico) nature é um local perfeito.Onde animais vivem nature é importante porque lá vai ter Hunt's que o jogador passará pela nature até chegar as Hunts.
Exemplo VictorFT
Exemplo GuuhMaster
Exemplo Laug
Exemplo Left4dead
Então é isso galera, Obrigado por verem o tópico ,espero ter dado uma noção a todos.Quero ajudar vocês a Mappear ,Obrigado, para contatos adicione:[email protected] skype:victor.fernandes.t
Att.
VictorFT
-
VictorFT recebeu reputação de CoyoteStark em • Guia de Cidades(Imagem feita pela AnneMotta)
• Eai pessoal, Tudo Bom? Hoje estava com vontade de fazer um Tutorial , mas não sabia de que.Praticamente não é um Tutorial ,é um Guia que irá te ajudar a como Criar sua Própria city. Você quer criar um mapa próprio?Primeiramente , tenha 'Segurança' saiba oque agradará e oque não agradaria os jogadores.Os Jogadores querem se sentir 'confortáveis' , então você precisa fazer algo Bacana.
• Templos
O Templo é definitivo, você pode fazer um Templo Medieval, mas realmente não precisa ser só de um estilo.Victor Como Assim, não precisa ser só de um Estilo?O Templo pode ter Nature, você pode por o templo no meio do Nada, para dar impressão que ele chegou perdido e não sabe (mais para mapas próprios).
Agora voltando no Templo com nature , não importa o Lugar.
• O templo pode ser em cima de uma Montanha , pode ser no 'Inferno', local de gelo, Pode ser em um Oasis.É com você o templo. Agora vou dar um Exemplo de Templo com Nature.
Feito por Alissow.
Vital900
Exemplo AnneMotta
Sinceramente eu adoro esse Templo, acho legal o mais legal é porque ele é variado.É raro você encontrar um Templo assim. O Templo também pode ter Cachoeira, pode estar embaixo de uma cachoeira e esta cachoeira chegue até ele, se for fazer isto faça algo Coerente. Não algo sem Sentido,porque tudo que precisamos é de um Templo.Mas tenha criatividade no seu Templo pois é uma Rotina, quando o Player nascer ele vai nascer neste lugar.
A Importância do Templo é muito Grande, sempre veja se está legal ou não está.Pergunte para Amigos se eles Gostam ou não,o mais legal de um Templo são seus Detalhes.Então faça algo confortável.
• Ruas
Ruas são locais onde o Jogador fará seu comércio, então ele sempre irá dar uma passada por lá depois de voltar da sua Aventura, passará para comprar coisas, vender também.Faça uma coisa agradável não precisa ser tão grande, pode ser pequeno mas tem que ser detalhado.City pequena,rua pequena,City grande rua grande.Então você primeiramente faça algo Agradável, primeiro com o Ground ,depois fazendo detalhes e depois faça as Casas de comércio.Não precisa ser diferente.Mas cade cidade tem um 'tema'.
Exemplo de Rua
Feita pelo Left.
Uma rua bem simples ,mais é bem detalhada como podem ver ,é agradável em duas partes.Na Construção e na Nature.
Para fazer uma Rua , você tem que fazer oque está na sua cabeça para deixa-la agradável, Uma rua pode ter até cachoeira se você quiser , pode ter oque você quiser contanto que seja Agradável e bonita.Como eu disse está rua não está grande mas está muito bem Detalhada e agradável.Então faça mais o menos desse estilo ou como desejar.
• Depot
Muito importante na parte de Seu mapa onde os players , irão guardar sues pertences e quando estiverem com Cap totalmente ocupada vão guardar seus itens, Depot precisa de Npc's que vendam Parcel, se quiser adicione O Banker nele.O Depot seguirá sempre o Estilo de sua City, se sua City for estilo Desert o Depot obviamente será estilo Desert, Sua City for perdida o seu Depot vai ter estilo de local abandonado,sujo e destruído.Depot é legal fazer desde que tenha um estilo bom , um formato agradável.
Exemplo LordZezim
Depot é um local bonito como vocês podem ver este está excelente variado na montanha , cachoeira logo em seguida detalhamento incrível.
Está lindo este Depot , formato perfeito.
• Fortaleza
Forteza é um local onde protege a Cidade, a fortaleza é um local onde será uma defesa contra ataques na sua cidade, ela também irá seguir o Rumo de sua cidade , sua cidade é no estilo Stone sua Fortaleza vai ser feita de Stone, se sua cidade for no Estilo de Deserto ela vai ser estilo deserto , faça uma fortaleza onde os jogadores possam sair da Cidade, para ir até suas Hunt's .Faça uma Fortaleza legal variando no formato não deixe muito reta. Faça algo coerente, um telhado bonito etc.
Exemplo VictorFT
A Fortaleza está realmente agradável variada nos detalhes , está bonita e bem jogável.Se perceberem logo em seguida tem uma hunt pode ser uma 'Hunt Principal'.
Dica: Adicione Stone's no chão e sangue, para mostrar que guerreiros passaram por ai, água para mostrar que é suor pois deserto é um local muito quente.
• Loja
Loja é um local onde o jogador fará a sua rotina,ele irá comprar itens,venderá itens.Se lembram quando eu falei sobre as Ruas? Então bote as Lojas nas ruas, as lojas podem ser de Knight, Paladin, Mago, para vender itens.Você pode fazer do estilo que quiser , Um dia o Vital900 me explicou que cada cidade pode ter o Padrão de telhado se você usa um estilo de telhado, você usará nas outras construções da mesma cidade.Loja pode ser um local agradável.Pode ter nature, etc. É igual Depot ,se sua city é abandonada sua loja será abandonada, e por ai vai.
Exemplos de Lojas (VictorFT,TecBreakerByLipe/Kyoran)
VictorFT
TecBreakerByLipe/Kyoran
• Caves And Nature
Nesta etapa final irei explicar cave primeiro.
Primeiramente , cave é quase oque defini um Mapa cave tem que ser algo agradável , não algo que os players não gostem , não quero desrespeitar quem gosta de Baiak, Mas pelo amor de Deus as caves de Baiak são mal feitas. Cave é um local onde o player fará uma Rotina até um certo level.Então você fala assim "Bobagem pra mim cave o importante é que upa", Certamente você está certo, mas e ai a questão é , o seu mapa é próprio você vai querer fazer uma cave que tem intenção 'só de upar' ou quer uma cave legal e ao mesmo tempo com a mesma intenção (de upar)?Você que escolhe , se você quiser que só upe, cara... esse tópico não vai te ajudar mas da uma olhada pra eu te converter e se você quer uma Cave que seja legal e agradável continue lendo.Muitas pessoas tem Mania de usar Auto B. em cave isso é Ruim , pois estraga sua Hunt, Raw é como se você tivesse mais liberdade mas demora, no Raw você pode por Objetos onde quiser , e com AB você não tem a mesma Liberdade.
Exemplo VictorFT:
Agora irei explicar sobre Nature é um local bonito , onde possui várias plantas, cachoeira e etc. A Nature é denominada de Natureza tem que ter bastante vida pode estar em qualquer lugar do seu mapa , como no templo (expliquei isto no início do tópico) nature é um local perfeito.Onde animais vivem nature é importante porque lá vai ter Hunt's que o jogador passará pela nature até chegar as Hunts.
Exemplo VictorFT
Exemplo GuuhMaster
Exemplo Laug
Exemplo Left4dead
Então é isso galera, Obrigado por verem o tópico ,espero ter dado uma noção a todos.Quero ajudar vocês a Mappear ,Obrigado, para contatos adicione:[email protected] skype:victor.fernandes.t
Att.
VictorFT
-
VictorFT recebeu reputação de Sufaiter em Hokai CityHokai city é uma Cidade de RPG espero que gostem
Fotos:
Créditos : Hokai
Download link:
RPGProject /////
Reupload.!!!
RPGProject.otbm - Speedy Share - upload your files here
-
VictorFT recebeu reputação de ExtremeAlissow em [Show Off] DuMal & VictorFT[show Off] DuMal & VictorFT