Ir para conteúdo

MaXwEllDeN

Héroi
  • Registro em

  • Última visita

  1. Peixola reagiu a uma resposta no tópico: Novo sistema de noticias
  2. Jugema começou a seguir MaXwEllDeN
  3. Muvukaa começou a seguir MaXwEllDeN
  4. unf4ced reagiu a uma resposta no tópico: Aulas de Scripting Lua
  5. B i e LL reagiu a uma resposta no tópico: (Resolvido)[Script] Npc Teleport
  6. BreNiinxz começou a seguir MaXwEllDeN
  7. BreNiinxz reagiu a uma resposta no tópico: [Aula 9] Tabelas
  8. Olá. Qual rev. do seu servidor? Ex, OTX 12.64. Abs.
  9. Olá, tenho algumas dúvidas: Qual rev do seu servidor? Seriam pilares que estão em um canto específico do mapa? Ou qualquer pilar de ID 8766 poderá ser energizado? O pilar energizado teria um tempo para voltar ao normal caso, por exemplo, os players não energisassem todos os 5? Ou uma vez energizado, eles só voltariam ao normal depois de todos os cinco serem energizados? Abs.
  10. MaXwEllDeN postou uma resposta no tópico em Playground (Off-topic)
    anne motta K
  11. allanzinh reagiu a uma resposta no tópico: Aulas de Scripting Lua
  12. jhonathan wendrell reagiu a uma resposta no tópico: [Aula 1] Introdução
  13. denisbts96 reagiu a uma resposta no tópico: [Aula 2] Lógica da Programaçao
  14. Cat reagiu a uma resposta no tópico: [Aula 4] Operadores e Bibliotecas
  15. Cat reagiu a uma resposta no tópico: Por onde começar?
  16. MaXwEllDeN postou uma resposta no tópico em Recursos Avançados
    Obrigado por lembrar, acabei de postar novamente.
  17. << Aula 3 - Primeiros Passos Operadores Aritméticos e Bibliotecas Aula 4 Na aula anterior vimos como chamar funções e conhecemos as funções print e type. Nesta aula apenas vou reforçar a aula anterior ensinando as funções mais básicas e usadas que são nativas da linguagem Lua, ou seja, não são funções criadas para Open Tibia Server, e sim funções prontas que já estão incluídas na linguagem Lua, e vou ensinar também os operadores aritméticos. Vamos começar com eles. Os Operadores Aritméticos OBS: Você pode fazer seus testes no editor e interpretador Lua usando a função print para exibir os resultados. Enquanto você quiser mecher em Lua (Ou em qualquer outra linguagem de programação), você vai precisar fazer contas matemáticas, sejam elas contas simples como uma adição, ou até mesmo contas complexas, incluindo fórmulas e etc... Os operadores aritméticos funcionam exatamente como na matemática que você está acostumado na escola. Os operadores aritméticos que você provavelmente conhece (A não ser que esteja usando fraldas) são: Adição (+) Subtração (-) Multiplicação (*) Divisão (/) O resultado será: OBS: Se este não for o resultado, procure a assistência técnica pois seu sistema operacional só pode ser pirateado. Existem mais 3 operadores aritméticos que você talvez não conheça. São eles: Módulo (%) Exponencição (^) Unário (-) Vamos ver um por um: O Operador de Módulo (%): Este operador vai lhe dar o resto de uma divisão, por exemplo, o módulo de 3 por 2 é 1, pois 3 dividido por 2 dá 2 e sobra 1. print(3%2) Resultado: 1 O Operador de Exponencição (^): Este operador vai lhe dar o valor de uma potência, por exemplo, a potência de 3 por 2 é 9, pois 3 elevado a 2 dá 9. print(3^2) Resultado: 9 O Operador Unário (-): Este operador vai lhe dar o inverso de um valor, por exemplo, o inverso de 3 é -3, pois 3 vezes -1 dá -3. print(-3) Resultado: -3 Prioridades Aritméticas (( e )): Existem também as prioridades aritméticas, que devem ser definidas com ( para iniciar e ) para finalizar. Por exemplo: print(3+3*3) print((3+3)*3) Resultado: 12 18 As Bibliotecas Vimos na aula anterior que existem vários tipos de dados, como por exemplo, strings e números. Assim como estes tipos, existem bibliotecas (Conjuntos de funções) para manipular estes tipos. Vamos conhecer as funções mais básicas das bibliotecas mais usadas. A Biblioteca Padrão: A biblioteca padrão não contém funções para manipular especificamente um tipo de dado, e sim o ambiente de programação. Suas funções mais básica, importantes e mais usadas são: Sintaxe: Modo correto de escrever o código. OBS: O que estiver entre [ e ] são argumentos opcionais, ou seja, você pode defini-los ou não. Quando houver três pontos (...) significa que você pode enviar quantos argumentos desejar. dofile(filename) Abre o arquivo e o executa como um bloco de código Lua. Ótima função para carregar bibliotecas criadas em Lua. print(···) Escreve uma ou mais frases no interpretador. Ótima para fazer testes. A função suporta todos os tipos de dados. tonumber(value [, base]) Transforma um valor em número. Se não for possível converter, retorna 'nil'. tostring(value) Transforma um valor em string. type(value) Retorna o tipo de um valor. Todas as funções da biblioteca padrão! A Biblioteca Math: A biblioteca Math serve para manipular operações aritméticas, números, etc... math.ceil(x) Retorna um valor inteiro maior que x mais próximo de x. (Em outras palavras, arredonda para cima.) math.floor(x) Retorna um valor inteiro menor que x mais próximo de x. (Em outras palavras, arredonda para baixo.) math.random([m [, n]]) Retorna um valor pseudo-randômico entre m e n baseado em uma semente (Um número que determina a sequência). math.randomseed(value) Altera a semente do pseudo-randomismo. Todas as funções da biblioteca math! A Biblioteca String: A biblioteca string manipula strings... :slap: string.gsub(s, pattern, repl [, n]) Procura na string 's' por valores iguais à string 'pattern' e substitui pela string 'repl'. string.len(s) Esta função retorna o tamanho da string 's'. string.lower(s) Retorna a string 's' com as letras em minúsculas. string.upper(s) Retorna a string 's' com as letras em maiúsculas. string.rep(s, n) Retorna a string 's' repetida 'n' vezes. string.reverse(s) Retorna a string 's' ao contrário. string.sub(s, i [, j]) Retorna a parte da string 's' entre as posições i e j. Todas as funções da biblioteca string! A Biblioteca OS: Esta biblioteca serve para pegar valores ou manipular o sistema operacional, como por exemplo, pegar a data. os.clock() Retorna o tempo de execução do script, em segundos... os.date([format [, time]]) Retorna a data baseada no formato 'format'. os.time([table]) Retorna um número correspondente à hora atual. Todas as funções da biblioteca OS! Outras Bibliotecas: (Avançado) Todas as funções da biblioteca Coroutine! Todas as funções da biblioteca Debug! Todas as funções da biblioteca Input/Output! Todas as funções da biblioteca Table! Exercícios: Pratique o uso das funções das bibliotecas math e string. (Y) Essa aula foi escrita por uma raposa levada Skyen Hasus, todos os créditos são dele. Aula 5 - Variáveis e Comentários >>
  18. Ghaz reagiu a uma resposta no tópico: [Aula 3] Primeiros Passos
  19. Salve rapasiada. Revivendo aqui pra avisar que corrigi is links das aulas que quebraram quando fizeram atualização do forum. Não consegui encontrar no fórum a aula 4, de alguma forma ela se perdeu. Abraços
  20. Olá! Poderia descrever melhor como funcionaria isso? Seria como se as cores de outfit do NPC mudassem em determinados horários do dia? Em que instante essas cores devem mudar?
  21. Mateus Robeerto começou a seguir MaXwEllDeN
  22. MaXwEllDeN reagiu a uma resposta no tópico: O que são Storages?
  23. MaXwEllDeN reagiu a uma resposta no tópico: (3º) | [8.60] - Epic Server
  24. MaXwEllDeN reagiu a uma resposta no tópico: Alavanca que troca itens
  25. Items UniqueID Olá, pessoal. Tudo tranquilo? Após muito tempo sem publicar nada, resolvi comentar um assunto que pode ser um pouco obscuro, que eu usava bastante mas demorei certo tempo pra entender realmente o que era. Estou falando do UniqueID, os IDs únicos. Alguma vez vocês já se perguntaram como o servidor faz para diferenciar o health potion que você possui em sua backpack, do health potion que outro player acabou de dropar em uma caçada? Pois é! O servidor tem uma forma bem simples e inteligente de distinguir um item do outro. Ele atribui a cada item um número único, que funciona como a digital do item. Dessa forma, quando usamos o health potion que está em nossa backpack, o servidor sabe exatamente qual item remover, dentre tantos outros existentes no seu servidor. -Certo Max, mas aonde você quer chegar com esse papinho? As UniqueIDs podem ser usadas para fazer a ligação de um item específico a um script, assim como as actionIDs, a diferença nesse caso é que só podemos ter um único item em todo o servidor com esse UID(uniqueID). -Hmm, quer dizer que a UID em um script funciona da mesma forma que uma AID(actionID)? Quase isso. Pelo Map Editor você pode atribuir a UniqueID diretamente a algum item do mapa, assim como você faz com ActionID. Basicamente, você poderia dividir as ações no seu servidor em duas partes: Aquelas que são exclusivas de um único item e aquelas que podem ser atribuídas a mais de um item. Presta atenção que quando falo único item não estou me referindo ao tipo do ítem, como por exemplo todos os crystal coins(itemID 2160) do jogo, mas sim a um crystal coin específico, como um que esteja em uma área de alguma quest. Por fim, para esclarecer mais um pouco, vou deixar dois exemplos distintos, onde em um eu escolheria usar o itemUID para atribuir certa ação a um item, e em outro eu escolheria usar a actionID. Caso onde seria mais agradável utilizar itemUID: Imagina que você está desenvolvendo um script para a Annihilator, mais precisamente da alavanca que teletransporta os players para dentro da sala dos Demons. Como essa alavanca é um item único no servidor, não haverá nenhuma outra alavanca que quando clicada levará os players para a sala dos Demons, eu escolheria atribuir a ela um itemUID único, e associar esse UID ao script que teletransporta os players para dentro da quest. Caso onde seria mais agradável utilizar actionID: Agora, imaginemos um caso onde precisamos criar por exemplo, uma pedra que heala quem clicar nela, e precisamos atribuir essa mesma ação a três pedras iguais, distribuídas pelo mapa. Como nesse caso teremos mais de um item compartilhando a mesma ação, seria ideal utilizarmos actionIDs para fazer a ligação dessas pedras com o script que heala o player. É isso, pessoal. O tópico de hoje foi bem simples e enxuto. Caso tenha restado alguma dúvida ou vocês tenham alguma dúvida sobre scripting no geral e gostariam de saber mais, pode deixar um comentário aí que assim que eu tiver tempo respondo. Abraços e fiquem com Deus.
  26. GOD Vitor começou a seguir MaXwEllDeN
  27. Você poderia usar o onDeath, pra não precisar dessa parte do código que varre a stack de itens para remover o corpse. Ou colocar o doRemoveCreature antes do doSummonCreature :D. Seria bacana colocar o doRemoveCorpse fora do onStatsChange também, pra ele não ficar redefinindo a função sempre que uma criatura morresse. Abraço Vodk
  28. local config = { msgDenied = "Para passar aqui voce precisa completar as tasks nescessarias", msgWelcome = "Sua passagem esta liberada!!.", storage = 50000, } function onStepIn(cid, itemid, position, fromPosition) if getPlayerStorageValue(cid, config.storage) < 1 then doTeleportThing(cid, fromPosition, true) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, config.msgDenied) doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE) else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, config.msgWelcome) end return true end
  29. O problema no seu código está aqui: doPlayerAddItem(cid, math.random(config.id[0], config.id[2]), 1) Vamos analisar por partes. Primeiro, devemos prestar atenção em como o método doPlayerAddItem se comporta: Vamos prestar atenção no que você fez: Código corrigido: local config = { [0] = 8302, [1] = 8301, [2] = 8300, } function onUse(cid, item, fromPosition, itemEx, toPosition) doPlayerSendTextMessage(cid, 22, "Você Recebeu seu item!") doPlayerAddItem(cid, config[math.random(#config)], 1) return true end local config = { [0] = 8302, [1] = 8301, [2] = 8300, } function onUse(cid, item, fromPosition, itemEx, toPosition) doPlayerSendTextMessage(cid, 22, "Você Recebeu seu item!") doPlayerAddItem(cid, config[math.random(#config)], 1) return true end
  30. Exatamente. Olha o ponto As funções retornam! no tópico, que você vai ter a resposta para essa pergunta.
  31. Seguinte, todo valor, terá um tipo. Assim como discutido, Strings armazenam cadeias de carácteres, como por exemplo o nome de uma pessoa: print("João") A função type, serve para nos dizer qual o tipo de dado de uma determinada variável. Exemplo: print(type("João")) Ela vai mostrar como saída: Caso seja escrito: print(18) Ela vai mostrar como saída:
  32. Ainda no arquivo CTFLib.lua, da linha 263 à 268, teremos o seguinte conteúdo: Essa é a parte do código que adiciona a recompensa aos players vencedores. Caso você queira que o player que vencer receba 10 Crystal coins, você pode adicionar abaixo da linha 263, o método que adiciona um item. Por exemplo, para adicionar 10 crystal coins: doPlayerAddItem(cid, 2160, 10) E o código passaria a ser:
  33. Algum problema na atualização do Fórum deve ter bugado o tópico. Tinha coisas em lugares trocados, informações importantes sem o destaque, etc. Reorganizei o tópico, dá uma lida novamente e tenta fazer o exercício!

Informação Importante

Confirmação de Termo