Ir para conteúdo
  • Cadastre-se

Aula Como funcionam os Scripts?


Posts Recomendados

Muito boa a aula Max, meus parabéns!

Tópico impecável na organização e conteúdo :accept:

# Regras Gerais - TibiaKing.com #
Contato: [email protected]
Não respondo dúvidas via MP.


1C2tu.png4Tlqo.png1C2tu.png


 

Link para o post
Compartilhar em outros sites
  • 1 month later...

Muito boa a aula Max, meus parabéns!

Tópico impecável na organização e conteúdo :accept:

perfeito max, muito bom mesmo!

Obrigado. Tô com vontade de fazer mais tutoriais, se alguém tiver alguma dúvida aí!

-"Supra Omnes Lux Lucis"

- Acima de todos brilha a Luz -

5VGnDyBz.png

Link para o post
Compartilhar em outros sites

Opa... tenho uma dúvida...

Mas é bem especifica, na verdade é sobre o Tibiabot ng, tem algum modo de carregar os scripts todos de uma vez, ou até mesmo, juntar todos os scripts em um só arquivo???

Sei que não é o local ideal para essa pergunta, portanto, não precisa responder... quando chegar em casa vou testar alguma maneira para fazer isso...

é muito chat ochegar abrir o bot e ficar dando load/run em todos os scripts(por enquanto são 10)

Link para o post
Compartilhar em outros sites
  • 4 weeks later...

Belo tópico max.

function onUse(cid, item, fromPosition, itemEx, toPosition)

return isCreature(itemEx.uid) and doPlayerSay(itemEx.uid, "Aí isso doi", 1)

end

<action itemid ="N SEI ID" event ="script" value ="Nome_do_script.lua"/>

Retirado.

 

Skype: joaoxtibia85.

Link para o post
Compartilhar em outros sites
  • 1 year later...

 

Como funcionam os Scripts?

Você já deve ter se perguntado como os scripts funcionam ou não. Por exemplo: Como o servidor sabe que quando eu apertar com o botão direito em um Health Potion ele terá que healar o player alvo?

Em primeiro lugar devemos entender o que são callbacks. Do modo mais simples callback é algo que acontece devido a uma reação, é como a Terceira Lei de Newton que diz que toda ação gera uma reação, esse callback é a nossa reção, é uma função que vai ser executada assim que algo acontecer, no caso do Health Potion assim que ele for usado.

Quando um item é usado ele provoca a chamada de um callback dessa função:

function onUse(cid, item, fromPosition, itemEx, toPosition)
end
Max, que parâmetros são esses? hum.jpg

– É simples.

700zUt.png

fromPosition - Essa é a posição que os Potions estavam quando eu usei eles.

itemEx - Se o alvo for um item vai retornar uma tabela igual à item, mas com as informações do item-alvo. Se o alvo for uma criatura, o itemEx.uid, será o CreatureID do alvo.

toPosition - Retorna uma tabela da posição do alvo(Do SQM que estava na mira do Crosshair).

O Script do Health Potion ficaria +/- assim:


local config = {
min_heal = 100, -- Minimo que vai healar
max_heal = 200, -- Máximo que vai healar
empty = 7636, -- Id do Potion vazio
}

function onUse(cid, item, fromPosition, itemEx, toPosition)
if isCreature(itemEx.uid) then
doCreatureSay(cid, "Aaaah...", 19)
doSendMagicEffect(toPosition, 12)
doCreatureAddHealth(itemEx.uid, math.random(config.min_heal, config.max_heal))
doTransformItem(item.uid, config.empty)
else
doPlayerSendCancel(cid, "You cannot use this object.")
end

return true
end

Bem, esse aí é o script, agora só é você salvar, colocar na sua pasta actions/scripts e pronto!

– Max, se existem vários scripts na pasta actions/scripts, como meu OT sabe qual usar?

– Por causa das chamadas TAGs.

TAGs?

– Sim, é uma linha que é colocada no .xml para dizer ao seu servido que o Callback para um item x será a função daquele script.

As Tags das actions seguem esse modelo:

<action itemid = "7618" event = "script" value = "HealthPotion.lua" />

Exercício: Crie uma Action que quando eu usar uma Warlord Sword em alguém essa pessoa diga "Aí, isso doi". Poste a TAG também!

Resposta SÓ ABRA DEPOIS DE RESOLVER:


function onUse(cid, item, fromPosition, itemEx, toPosition)
   if isCreature(itemEx.uid) then
      doCreatureSay(itemEx.uid, "Aí isso doi", 1)         
   end

   return true
end
Tag:

<action itemid = "2408" event = "script" value = "Warlord.lua"/>

É isso aí pessoal, essa foi a primeira aula de Scriptwriting que eu escreví, espero que gostem :3

 

Link para o post
Compartilhar em outros sites

Função para remover caixa

 

doRemoveItem(itemUID, quantidade)

 

Função para adicionar um item:

 

doPlayerAddItem(cid, itemID, QuantidadeItem)

-"Supra Omnes Lux Lucis"

- Acima de todos brilha a Luz -

5VGnDyBz.png

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por MatteusDeli
      Nesse tópico você irá aprender a diferença entre ItemID, ActionID e UniqueID na criação de scripts.
       
      Primeiramente vamos começar com o ItemID, imagine que você está criando um simples script que o player pode ter acesso a uma área VIP, só que para ele entrar, primeiro precisará passar por um tile especial que possui o ID 471, até aqui tudo bem, só que qualquer player do servidor irá ter acesso também, já que não possui nenhuma restrição.
       
      Como poderíamos resolver isso?
       
      É aqui que entra a função da ActionID, com ela podemos dizer que os tiles que tiverem o valor 1000 no atributo ActionID, serão os tiles referentes a área VIP. Agora temos uma maneira de diferenciar os tiles comuns dos que são VIPs, veja como ficaria:
       

      (tiles sem as ActionIDs no valor de 1000)
       
      Repare que os 3 tiles tem apenas o atributo ItemID: [471]. Todos os players poderiam passar sem problemas… Caso você use apenas esse tipo de tile para as suas áreas VIPs então não tem problema, agora se você usa esses mesmos tiles para outras finalidades, então você precisará recorrer a ActionID, para que assim consiga diferenciá-los.
       
      Vamos adicionar as ActionIDs então:
       

      (tiles com as ActionIDs adicionados no valor de 1000)
       
      Pronto, agora apenas esse tiles terão a função de controlar a entrada para a área VIP!
       
      Bom, então você deve estar se perguntando, aonde que o UniqueID entra nessa história?
       
      O UniqueID é parecido com a ActionID com apenas uma diferença. O valor que você define para ele deve ser único para o servidor inteiro, caso ele se repita aparecerá um aviso na sua distro, mais ou menos como este…
       

       
      Repare quantos UniqueIDs duplicados existem, isso é ruim porque quanto mais tiver mais tempo demorará para o servidor iniciar, entre outras coisas como conflitos de scripts.
       
      Concluindo…
       
      O ItemID é usado quando você quer que todos os itens com esse ID façam uma ação, por exemplo a fishing rod, qualquer player pode comprar uma no NPC e começar a pescar.
       
      A ActionID é usado geralmente quando você quer diferenciar os mesmos itens um dos outros. Eu tenho 2 crystal rings só que apenas um deles vai me curar 500 de vida quando usá-lo.
       
      O UniqueID é quando você quer definir um ID único para um determinado item e só terá apenas um dele no servidor, um exemplo seria uma estátua que vai dar ao player um determinado item e só existirá somente uma dela no jogo.
       
      Tentei ser o mais breve e direto sobre esse assunto, espero que tenha ficado claro… Agora é só praticar!
    • Por MaXwEllDeN
      << Aula 9 - Tabelas
      Essa aula foi escrita por uma raposa levada Skyen Hasus, todos os créditos pertencem a ele.
      O Comando for
      Aula 10
      Você nunca viu o comando for? Ou já abriu um Script e não entendeu nada por causa dele? Eis aqui uma explicação de como funciona o comando e alguns exemplos de utilização, assim como alguns exercícios.
      Antes de mais nada, o que faz o for?
      R: O for causa um "loop", mas não é como o while e o repeat. Por que? Porque ele atribui à uma variavel todos os valores entre o valor inicial e o valor final.
      Editado: O For não é um comando Condicional!
      Estrutura do For:
        for variavel = valor inicial, valor final[, incremento] do bloco end Não entendeu? Então vamos à breves explicações, começando com um exemplo abstrato:
        local i = 1 local j = 10 local inc = 1 for var = i, j, inc do print(var) end "Oh! Que bicho é este?" R: Isto é um exemplo ridículo do uso do for. Se você nunca viu isso antes, obviamente não entendeu, mas não é nenhum monstro de três cabeças. Quando eu explicar o que foi feito, você vai ver que é muito simples. Nas três primeiras linhas eu defini três variaveis locais, para "limpar" o script e facilitar o entendimento de quem ainda não conhece o for: local i = 1: Aqui eu usei "i" como inicial e ela é usada na linha 5. Seu valor é 1. local j = 10: Aqui eu usei "j" como final e ela é usada na linha 5. Seu valor é 10. local inc = 1: Esté é o incremento do for e seu valor é 1. Vai ser explicada mais pra frente, então não se preocupe com ela agora. var: É a variável à qual será atribuida os valores. "Perai, agora estou com dúvida. Você não declarou a variavel var!" R: Isto é porque ela não precisa ser declarada! Ela só vai servir como variavel dentro do laço(for). Se eu tentasse usar ela em um bloco fora do for bloco do sem ter declarado ela antes, vai resultar num simples nil(Nulo)! print(): Só vai escrever no console. Explicada as variáveis, vamos entender o funcionamento do código: O for vai atribuir à var todos os valores entre o "i"(valor inicial) e o "j"(valor final), incluindo os dois! Não vamos nos preocupar com o incremento agora, pois você pode escrever o código sem ele. No caso, o valor padrão do incremento é 1. Vamos à mais um exemplo:
        print("-- Início --") for var = 1, 5 do print("Valor de var: "..var) end print("-- Fim --") As saídas geradas por esse Script serão:
        -- Início -- Valor de var: 1 Valor de var: 2 Valor de var: 3 Valor de var: 4 Valor de var: 5 -- Fim -- Entendeu agora? Na primeira vez o for atribuiu à var o valor 1, executou o bloco, depois ele fez um loop, voltando para o começo e re-atribuiu à var o valor inicial + 1 que é 2, executando o bloco de novo usando o novo valor de var. Depois valor inicial + 1 + 1 e assim vai até chegar no valor final que é 5, e é aonde ele para. "Tá, mas não vejo a utilidade do for." Então você, com todo o respeito, é cego! O que eu fiz em três linhas poderia ser feito assim:
        i = 1 j = 5 switch = TRUE while switch == TRUE do if i == j then print("Valor de i: "..i) switch = FALSE else print("Valor de i: "..i) i = i + 1 end end Ou, dando um desconto, para encurtar, no máximo poderia ser feito assim:
        i = 1 j = 5 while i <= j do print("Valor de i: "..i) i = i + 1 end Além de que você não pode usar variaveis locais dentro de whiles. Você entendeu tudo o que foi feito até aqui? R: Não! Então volte até a parte onde você "se perdeu" e não leia, estude, até entender. R: Sim! Então vamos complicar um pouco mais e aplicar o for em tabelas! (Atenção, você não precisa conhecer tabelas para continuar!) Aplicando o For em Tabelas! "Qual a utilidade de aplicar o For em tabelas?" R: Não sei se você percebeu, mas não podemos aplicar, do jeito que eu exemplifiquei acima, strings no for, mas há como fazer isso, sim! Usando tabelas(tables, arrays) "Como fazemos então?" Você precisa, antes de mais nada, declarar a tabela! Para quem não conhece, as tabelas são declaradas igual a variáveis, e podem ser locais ou globais. Você pode dar-lhes o nome que quiser, desde que não contenha caracteres especiais: !@#$%¨&*()-+=-*/,.ESPAÇO<>:;?|\"'`´[]{}°ºª¹²³£¢¬§. Underlines (_) são permitidos. Você pode utilizá-los como espaços. O valor das Tabelas ficam sempre entre chaves({}) e são separados por vírgulas! As strings seguem o padrão de estarem sempre entre aspas("")!
        local Tabela = {} "Pronto! E agora?" R: Está esperando o que? Adicione os valores! Vou inserir na minha tabela o meu nick e o nick de mais 3 amigos: <Falta de Imaginação >
        local Tabela = {"Skyen Hasus", "Hwoarang", "MotoBoy", "Luketez"} Agora entra o for, mas omo fazemos para pegar os valores da tabela? Simples! Qual é a posição do primeiro valor da tabela? É 1, então como valor inicial do for nós colocamos 1! E como valor final? Este valor varia, já que uma tabela pode conter vários e vários valores. Resposta: Nós usamos o #nome_da_tabela! O # retorna o número de valores que a tabela tem! Um outro jeito de fazer isso seria usando o table.getn(tabela), mas é mais fácil e curto com o #! "Ah! Então é só construir a estrutura do for e no bloco colocar print(var)!" Errado, meu amigo, embora a culpa seja minha. O for atribui à variável somente o valor NUMÉRICO, ou seja, ele vai atribuir a posição do valor na tabela. "Então como eu tenho que fazer?" Se você já conhece tabelas, pense um pouco, não é tão difícil! Pensou? Não conseguiu? Fácil! Como eu disse, a variável vai ter o valor da posição na tabela, então só temos que "achar" este valor, seguindo sua posição! Este não conhece tabelas-> "Mas como fazemos isso?" Usando o nome_da_tabela[posição] sendo a [posição] o valor da variável, já que ela tem o valor da posição! Veja como vai ficar:
        local Tabela = {"Skyen Hasus", "Hwoarang", "MotoBoy", "Luketez"} for var = 1, #Tabela do print("Valor "..var..": "..Tabela[var]) end E este script vai retornar:
        Valor 1: Skyen Hasus Valor 2: Hwoarang Valor 3: MotoBoy Valor 4: Luketez Acho que aqui vocês já entenderam guande parte e já podem sair fazendo suas "experiências". Caso queiram continuar, tem só mais um conteúdo: incrementos, e para outros, no final tem uns exercícios. Uso de Incrementos no For! Agora que você já aprendeu a usar o for, vai ser moleza aprender os Incrementos. "Mas o que eles fazem?" Eles continuam atribuindo os valores às variáveis, mas o incremento faz eles pularem alguns valores! Exemplo:
        for var = 1, 16, 3 do print(var) end Saídas geradas por este Script:
        1 4 7 10 13 16 Ou seja:
      Os números 2, 3, 5, 6, 8, 9, 11, 12, 14 e 15 são pulados pelo for! "Mas como eu uso?" Simples! Verifique no começo do tutorial a estrutura do for. Aonde está escrito incremento você "substitói" pelo número de valores que vai pular! À pedido do Mock! - Os comandos: in pairs() e in ipairs()! Antes de mais nada, saiba que ambos funcionam somente em tabelas! A diferença entre pairs() e ipairs() é que o pairs() vai incluir os índices no for, e o ipairs() não. Mas os dois fazer quase a mesma coisa: Além de definir um valor para uma variável "x", ele vai definir para a variável "y" a posição ou, no caso do pairs(), o índice. Exemplo do ipairs:
        local tabela = {2, 3, 4, 5, seis=6} for i, v in ipairs(tabela) do print(i, v) end Que retornará Posição(i), Valor(v):
        1, 2 2, 3 3, 4 4, 5 Observe que o ipairs() não retornou o "seis=6" Exemplo do pairs:
        local tabela = {2, 3, 4, 5, seis=6} for i, v in pairs(tabela) do print(i, v) end Que retornará Posição(i), Valor(v):
        1, 2 2, 3 3, 4 4, 5 seis, 6 E agora sim, o pairs() retornou o índice "seis=6" Acho que isso é tudo o que precisam saber sobre o ipairs() e pairs(). O resto depende da criatividade e necessidade de cada um. Exemplos de Uso do For!
        function onSay(cid, words, param) local Online = getPlayersOnline() -- Retorna uma Tabela for pid = 1, #Online do doPlayerSendTextMessage(Online[pid], MESSAGE_INFO_DESCR, "Server will be Restarted in "..param.." Minute(s)!") -- Arrumado por MotoBoy! end end   local creatures = {"deer", "rabbit", "minotaur", "ghoul", "orc"} for crat = 1, #creatures do table.remove(creatures, crat) end   function pularDois(i, j) local naoPulados = {} for index = i, j, 2 do table.insert(naoPulados, index) end return table.concat(naoPulados, ", ") end   for a = 664, 668 do if a == 666 then print("O número da vez é "..a.."! O número amaldiçoado!") else print("O número da vez é "..a.."!") end end Exercícios! Atenção! Faça os exercícios com sinceridade! Não os copie no Debugger do LUA nem olhe as respostas antes de ter certeza de que sua resposta está correta, mesmo que esteja errada, pois a resposta é só para conferir. Exercício 1 - O que há de errado na seguinte função?
        function exemplo(i, j, inc) for valor = i, j, inc then print(valor) end end Exercício 2 - O que há de errado na seguinte função?
        function exemplo(i, j, inc) for a = i, j, inc do print(b) end end Exercício 3 - O Script:
        local tabela = {"Teste 1", "Teste 2", "Teste 3", "Teste 4", "Teste 5", "Teste 6"} for valor = 1, 3 do print(tabela[valor*2]) end Vai retornar? A) 1, 2, 3 B) "Teste 1", "Teste 2", "Teste 3" C) nil, nil, nil D) 2, 4, 6 E) "Teste 2", "Teste 4", "Teste 6" Exercício 4 - Quantos valores o script abaixo retornará?
        for valor = 1, 20 do if valor <= (20/4)*3 then print(valor) end end Exercício 5 - Qual deve ser o valor do incremento do script abaixo para que sejam retornados 7 valores?
        local incremento = ??? for valor = 1, 50, incremento do print(valor) end Respostas:
      Essa aula foi escrita por uma raposa levada Skyen Hasus, todos os créditos pertencem a ele.
    • Por MaXwEllDeN
      << Aula 1 - Introdução
       
       
       
       
      Lógica da Programação
      Aula 2
       
       
       
       
      O que é a Lógica da Programação?
      Bem, tudo o que é escrito em alguma linguagem de programação deve seguir uma lógica para poder funcionar. Vamos pegar um exemplo simples e curto: Um script de SD. (Sudden Death Rune)
       
      Quando o script de SD for chamado (Alguém usou a SD), ela segue passos básicos, que é basicamente a execução dela. Primeiro o script vai verificar se quem usou a SD possui nível, magic level, etc... suficiente para poder usar a SD. Se não possuir opa! Ela vai enviar uma mensagem de erro ao jogador, um efeito de fumaça e vai encerrar a execução. Caso contrário: se for um jogador com todos os requerimentos básicos para usar uma SD, então o script vai verificar se o alvo é um Player ou Monstro. Se não for vai enviar uma mensagem de erro, efeito, e vai parar de executar. Se for um monstro ou player, então o script fará um efeito da SD atingindo o alvo, toda aquela piromancia louca, e então vai tirar o devido dano do jogador.
       
      Um pouco cansativo de ler tudo isso, mas observe o exemplo abaixo:
       
       
        Quando uma SD for usada, então faça: Verifique se o jogador que usou a SD possui nível igual ou maior que 45, e se possui nível mágico maior ou igual a 15. Se possuir, faça: Se o alvo da SD for um Monstro ou Jogador, então faça: Calcule o dano que causará ao alvo. Remova uma carga da SD. Execute o efeito de SD. Calcule o dano que causará ao alvo e execute-o no alvo, tirando a vida dele ou mana, no caso de o alvo estiver usando o Magic Shield (Utamo Vita). Mas se o alvo da SD não for um Monstro ou Jogador, então faça: Envie uma mensagem de erro ao jogador. Envie um efeito de fumaça na posição do jogador. Aqui termina a verificação se o alvo da SD é um Monstro ou Jogador, ou nenhum dos dois. Mas se o jogador não possuir estes requerimentos, então faça: Envie uma mensagem de erro ao jogador. Envie um efeito de fumaça na posição do jogador. Aqui termina a verificação se o jogador possui ou não os requerimentos. Aqui termina a execução da SD. Agora, depois deste algoritmo, talvez tenha ficado mais claro como os programas de computador funcionam. Tudo não passa de um processo lógico, onde a linguagem de programação só serve como uma "máscara" para que o programador escreva o código seguindo esta lógica, por isso é ultra importante saber a lógica da programação antes de começar a programar. O que é um Algoritmo? O "código" que eu escrevi acima (Dentro da caixa de texto) representando o uso da SD foi um algoritmo. Os algoritmos são formas de representar a lógica seguida pelo programa. São passos que o programa segue para atingir determinado objetivo ou em outras palavras, completar uma tarefa (No caso da SD, matar ou não o alvo, ou enviar uma mensagem de erro). Um exemplo de algoritmo são as operações matemáticas, como somar, dividir, multiplicar, subtrair... Quando você soma 2 mais 2, você está executando um algoritmo para ele atingir o objetivo (O resultado!!), que é 4. Um programa ou script é basicamente a escrita dos algoritmos em uma linguagem de programação que é executada pelo computador de forma lógica.
       
      Esta aula foi curta pois eu prefiro lhes ensinar as estruturas lógicas conforme ensino as mesmas em Lua, assim trabalhando a lógica e Lua ao mesmo tempo. Primeiro ensino como funciona a estrutura na Lógica e depois ensino como aplicar em Lua.
       
      Exercícios-Tarefa:
       
      1. Monte o algoritmo de um script de "Shovel (Pá)".
      2. Monte o algoritmo de um script de "Pedra que troca sexo".
      3. Monte o algoritmo de "Ir ao cinema".
      4. Monte o algoritmo de "Fazer bolo".
       
       
       
      Respostas: Só abra depois de ter tentado resolver os exercícios!
       
      Exercício 1:
       
       
       
      Exercício 2:
       
       
      Exercício 3:
       
       
      Exercício 4:
       
       
       
      OBS: Nota-se que já fiquei cansado nas respostas do exercício 3 e 4... 
       
      Aqui só serão aceitas dúvidas ou reporte de erros. Qualquer coisa que não se encaixe nesta descrição será apagado sem aviso.
       
      Essa aula foi escrita por uma raposa levada Skyen Hasus, todos os créditos são dele.
       
       
      Aula 3 - Primeiros Passos >>
    • Por UsToOliNN
      Olá rapaziada fiz um video ensinando alguns conceitos basicos de C++ e mostrei como criar uma calculadora basicona, fiz esse video com intuito de ajudar e mostrar um pouco desse linguagem que foi ultilizada para fazer o nosso amado tibia :D
       
    • Por tataboy67
      Galera eu venho aqui trazer para vocês um canal de youtube de um cara que acabei conhecendo ! Ele simplesmente é sensacional e trabalha com programação a 15 anos.
             Então resolvi vir aqui ao fórum para divulgar para vocês as aulas que ele fez sobre arquivos .lua muito bom mesmo o trabalho do cara... são 17 videos explicativos sobre a programação .lua
      Está aqui a lista dos videos do cara ! Espero que ajude vocês a entender um pouco de script . Está me ajudando bastante aqui.
             
       
      **Creditos**
      Canal do youtube : Criar Jogo
      Eu : por posta  
       
      Rep ++
      Espero ajudar  
      Obs: Não sei se está na area correta... é que não sou mt de fazer post's
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo