Ir para conteúdo
Banner com Efeitos

Calisto

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    Estou amando trabalhar com OTclient, e obrigado pelos design's que vc proporcionou!, não tenho muito conhecimento, mas estou estudando para melhorar meus conhecimentos, não manjo de puxar informações para por personagem, mas um dia vou conseguir!
     

     

     
  2. Gostei
    Estou amando trabalhar com OTclient, e obrigado pelos design's que vc proporcionou!, não tenho muito conhecimento, mas estou estudando para melhorar meus conhecimentos, não manjo de puxar informações para por personagem, mas um dia vou conseguir!
     

     

     
  3. Curtir
    Calisto recebeu reputação de Jhow ZL em [PEDIDO] Contagem Regressiva (GESIOR)   
    Deu certo aqui vlw, ainda consegui personalizar
     

  4. Gostei
    Estou amando trabalhar com OTclient, e obrigado pelos design's que vc proporcionou!, não tenho muito conhecimento, mas estou estudando para melhorar meus conhecimentos, não manjo de puxar informações para por personagem, mas um dia vou conseguir!
     

     

     
  5. Gostei
    Estou amando trabalhar com OTclient, e obrigado pelos design's que vc proporcionou!, não tenho muito conhecimento, mas estou estudando para melhorar meus conhecimentos, não manjo de puxar informações para por personagem, mas um dia vou conseguir!
     

     

     
  6. Gostei
    Calisto deu reputação a Cat em OtClient V8 - Sources   
    OTClient V8
    OTClientV8 é um mecanismo de jogo 2D altamente otimizado, baseado em blocos, construído com c ++, lua, physfs, OpenGL ES 2.0 e OpenAL. Funciona hem, mesmo em computadores com 12 anos de uso. Funciona em Windows (min. Windows 7), Linux e Android (min. 5.0).
     
    V8 NOVIDADES
    • Renderização reescrita e otimizada (60 fps em um computador de 11 anos)
    • Melhor suporte ao DirectX9 e DirectX11.
    • Renderização adaptável (otimizações gráficas automatizadas)
    • Renderização de luz reescrita e otimizada
    • "Path finding" e "auto walking" reescritos.
    • "Walking system" reescrito com animações.
    • HTTP/HTTPS lua API com suporte à JSON.
    • API WebSocket lua.
    • Auto updater com modo de recuperação.
    • Novo sistema de arquivos
    • Criptografia e compactação de arquivos
    • Sistema de diagnóstico automático
    • Interface atualizada
    • Novo manipulador de "crash" e "error".
    • Novo protocolo de login HTTP
    • Loja no jogo (mesma do tibia).
    • Gerenciador de "hotkeys" atualizado.
    • "Battle list" otimizada e atualizada.
    • "Crosshair" (mira), "floor fading", barras de hp/mp extras e painéis.
    • Muitas outras opções de clients.
    • Removido muitas coisas inúteis e desatualizadas
    • Bot Avançado
    • Versão Linux.
    • Suporte completo para tibia 11.00
    • Layouts
     
     
     
    Download Oficial: Link
    Download Tk: otclientv8-master.rar
    Contribua no Github: https://github.com/OTCv8/otclientv8/issues
     
    IMAGENS:



     
     
     
    Créditos: Edubart
     
     
  7. Gostei
    Calisto deu reputação a Pifafa em [PEDIDO] Contagem Regressiva (GESIOR)   
    Olá posso tenta te ajuda nessa parte!
     
    <!-- Countdown INICIO --> <div id="CountDownBox" class="Themebox" style="background-image: url('layouts/tibiarl/images/themeboxes/countdown/countdown_box.png');"> <span class="countdowntext">Inauguração!</span> <div style="background:url(./layouts/tibiarl/images/themeboxes/countdown/Cuckoo_Clock.gif);width: 43px;height: 32px;position: absolute;margin-left: -2px;margin-top: 2px;"></div> <div class="Bottom" style="background-image: url('layouts/tibiarl/images/general/box-bottom.gif');"></div> <div id="countdown"> <div style="margin-top: 39px;margin-left: 8px;"> <b><span class="days" style="margin-left: 5px;"></span></b> </div> <div> <div class="Separator" style="background-image: url(./layouts/tibiarl/images/themeboxes/countdown/separator.png);"></div> <b><span class="hours"></span></b> </div> <div> <div class="Separator" style="background-image: url(./layouts/tibiarl/images/themeboxes/countdown/separator.png);left: 0px;"></div> <b><span class="minutes"></span></b> </div> <div> <div class="Separator" style="background-image: url(./layouts/tibiarl/images/themeboxes/countdown/separator.png);margin-left: -7px;"></div> <b><span class="seconds"></span></b> </div> </div> <script> jQuery(function($) { function getTimeRemaining(endtime) { var t = Date.parse(endtime) - Date.parse(new Date()); var seconds = Math.floor((t / 1000) % 60); var minutes = Math.floor((t / 1000 / 60) % 60); var hours = Math.floor((t / (1000 * 60 * 60)) % 24); var days = Math.floor(t / (1000 * 60 * 60 * 24)); return { 'total': t, 'days': days, 'hours': hours, 'minutes': minutes, 'seconds': seconds }; } function initializeClock(id, endtime, message) { var clock = document.getElementById(id); var daysSpan = clock.querySelector('.days'); var hoursSpan = clock.querySelector('.hours'); var minutesSpan = clock.querySelector('.minutes'); var secondsSpan = clock.querySelector('.seconds'); function updateClock() { var t = getTimeRemaining(endtime); daysSpan.innerHTML = t.days; hoursSpan.innerHTML = ('0' + t.hours).slice(-2); minutesSpan.innerHTML = ('0' + t.minutes).slice(-2); secondsSpan.innerHTML = ('0' + t.seconds).slice(-2); if(t.total<=0){ clearInterval(timeinterval); document.getElementById(id).innerHTML = message; } } updateClock(); var timeinterval = setInterval(updateClock, 1000); } var deadline = 'March 20 2019 15:00:00'; initializeClock('countdown', deadline, '<div style="margin-top: 30px;margin-left: 45px;"><small><small><b>Servidor Iniciado!</b></small></small></div>') }); </script> </div> <!-- Countdown FIM --> Use na parte do site\layouts\tibiarl
    layout.php
     
    Lembro que só por ali o dia está certinho
    Ficaria assim depois de tempo certo está contato!

     
    Eu queria pode altera ele pra " Inaugurado"
    Por os dias, que está online no caso meu ot estaria a 1 ano já kkk.
  8. Gostei
    Calisto recebeu reputação de Cat em Água transparente no Tibia 70% (psd + png + obd)   
    Mano vai na pasta do seu OTC > Modules > game_things > things.lua

    Procura por: local version = g_game.getClientVersion()
     
    e abaixo adicionna isso 

        g_game.enableFeature(GameSpritesU32)
        g_game.enableFeature(GameSpritesAlphaChannel)
     

        
  9. Gostei
    Calisto deu reputação a Warzinhuw em ? OTC StoneDrake UI by Shiva - [Free Release]   
    Olá,
    Gostaria de escrever um prefácio, cortesia de um amigo conhecido aqui como Verticos, retratando um pouco da história e da origem, para que saibam o que estão recebendo e porquê.
     
    Há um tempo, criei a GUI para um cliente chamado Tinkz que pagou uma porção do preço de antemão, mantivemos uma ativa comunicação durante o processo de criação. Concordei com ele em enviar algumas partes da interface conforme fui as finalizando, para que ele pudesse já começar a implementar e codificar, pois sei o quão tedioso esse processo costuma ser. Ele me retornou esse favor não me respondendo mais assim que ele estava com todos os arquivos que queria em mãos. Alegadamente, ele foi e vendeu copias do layout em outras comunidades do OT e recebeu muito mais do que seu ‘investimento’ inicial. Desisti de vender o layout já que o cliente original me deu um golpe e Verticos ofereceu me recompensar por isso.
     
    Assim, ele me disse que posso compartilhar publicamente se quisesse. Então por quê não fiz isso antes?
     
    Sei que muitas pessoas estavam esperando por algo assim. Espero que isso agrade o dia de alguém.
    E gostaria de agradecer Verticos novamente por tornar isso possível, de forma alguma eu conseguiria compartilhar tudo isso de graça.
     

    A interface foi criada para ser uma versão um pouco mais estilosa e refinada do mesmo tema da interface do Tibia que todos conhecemos, a versão 7.X. Isso deve parecer familiar, mas novo.
    Tenha em mente que essa interface foi desenvolvida para implementação no OTCliente, mas pode ser usado para qualquer outra finalidade como: website, outro jogo, etc.
     
    Esse pack de interfaces contém apenas imagens e instruções para ajudar na implementação do layout, mas você mesmo terá que fazer isso. Seria muito legal se alguém publicasse uma versão publicamente desenvolvido e disponível para todos os usuários do OTClient, se não, acho que vão ter que pagar para alguns programadores fazerem isso.
    Pessoalmente, não tenho tempo para fazer isso mas posso ajudar se você ficar travado em algum ponto e se tiver uma branch publica para que eu possa contribuir. Ou, poste aqui sobre isso.
    Tem várias coisas uteis nesse pack mesmo para aqueles que só querem simplesmente mudar o visual de algumas coisas em seu client. Por exemplo, alguns ícones de ‘condition’ atualizados (Aqueles que você só espera encontrar em um servidor 7.X). 
     

     
    A interface foi originalmente feita com alguns tons de marrom, mas mais tarde no processo, mais e mais tons desse marrom foram neutralizados então temos um clássico tema de “pedra”.
     
    O layout é flexível e vem com inúmeras peças para possam decidir como usá-las. A combinação deve permitir que seja criado vários setups que combinam com cada gosto. (No exemplo abaixo, o resultado deve ser obtido através de código e não modificando as imagens):
     

     
    Diversos cabeçalhos e bordas de janelas para customizar ainda mais:

     
    Nem preciso dizer, o layout poderia se beneficiar de uma mudança na fonte, mas nem todo mundo está preparado para deixar pra traz o bom e antigo Verdana, então o Vernada foi usado como referencia na maior parte do tempo durante a criação do layout, mas segue aqui uma referência de qualquer forma. Mais informações no ‘readme’.

     
     
     
     

    Mirror 1
     
     Leia o arquivo Readme.txt para mais detalhes úteis.
    Aproveite!
     
    Crétidos: Shiva Shadowsong - (eu apenas traduzi para ele)
    Post orignial: ? OTC StoneDrake UI by Shiva - [Free Release] | OTLand
  10. Obrigado
    Bom galera, tem uma coisa bem simples que nem o tibia global fez e que eu to trazendo aqui pra vocês. Trata-se de um pequeno sistema que fará você sempre virar pra direção do seu target ao atacar.
    Testado em TFS 0.3.6 Cliente 8.54.

    Imagem auto explicativa:




    Chega de atacar de costas! 

    Agora pra instalar é bem tranquilo. Abra um arquivo .lua em data\creaturescripts\scripts chamado target e coloque o seguinte conteudo dentro dele:




    Feito isso adicione essa linha no creaturescripts.xml:
    <event type="attack" name="targetCreature" script="target.lua"/> E para finalizar adicione a seguinte tag em creaturescripts\scripts\login.lua:
    registerCreatureEvent(cid, "targetCreature") Espero que vcs tenham curtido, é algo bem simples mas ninguém havia pensado nisso antes (nem o próprio Tibia), é uma coisa bem básica e que torna o jogo bem mais importante e sério. 


    EDIT:: Usem essa versão que está mais completa, na anterior se o target estivesse na diagonal ele não virava.



  11. Obrigado
    Calisto deu reputação a Belmont em (Resolvido)Comandos de GOD não funcionando   
    @Calisto Verifica no talkaction.xml se os groups estão configurados para esse group usar os camandos. Caso estejam, só é você alterar o group do seu personagem ADM para o group que está registrada no talkaction.xml
  12. Curtir
    ja alterou no config.lua ?
     
    Config.lua \/
    newPlayerSpawnPosX = 32515
    newPlayerSpawnPosY = 32516
    newPlayerSpawnPosZ = 7
     
    no Site (accountmanagement.php)
    $char_to_copy->setTown($newchar_town); < em qual town ele vai nascer
    $char_to_copy->setPosX(0); < a position
    $char_to_copy->setPosY(0);
    $char_to_copy->setPosZ(0);
     
    Na Database: 
    Altera a position e a Town do accmanager e dos samples.
  13. Gostei
    Calisto deu reputação a LeoTK em (Resolvido)Não dropa itens de monstros   
    @Calisto tenta com player talvez tenha algum script ou dependendo da versão do servidor seria próprio da source não permitir dropar loot pra staff
  14. Curtir
    Calisto deu reputação a Storm em (Resolvido)Preciso de uma script   
    @Calisto 
    local config = { [1] = {item1 ={2150, 2, {x = 30, y = 30, z = 7, stackpos = 2}}, item2 = {2151, 3, {x = 30, y = 30, z = 7, stackpos = 255}}, chance = 50, result = {2160, 3, {x = 30, y = 30, z = 7, stackpos = 255}}}, [2] = {item1 ={2150, 2, {x = 30, y = 30, z = 7, stackpos = 2}}, item2 = {2151, 3, {x = 30, y = 30, z = 7, stackpos = 255}}, chance = 50, result = {2160, 3, {x = 30, y = 30, z = 7, stackpos = 255}}} } function onUse(cid, item, fromPosition, itemEx, toPosition) for _, var in pairs(config) do local item1 = getThingfromPos(var.item1[3]) local item2 = getThingfromPos(var.item2[3]) if item1.itemid == var.item1[1] and item2.itemid == var.item2[1] then if item1.type >= var.item1[2] and item2.type >= var.item2[2] then doRemoveItem(item1.uid, var.item1[2]) doRemoveItem(item2.uid, var.item2[2]) if math.random(1, 100) <= var.chance then doCreateItem(var.result[1], var.result[2], var.result[3]) doPlayerSendTextMessage(cid, 27, "Parabens! Você obteve sucesso na forja!") doSendAnimatedText(var.result[3], "Forjou!", 36) return true else doPlayerSendTextMessage(cid, 18, "Infelizmente a forja falhou!") return true end else doPlayerSendTextMessage(cid, 19, "Quantidade de itens insuficiente.") return true end end end return true end  
  15. Curtir
    Calisto deu reputação a tiroleivi em Global FULL 8.60 | Zao, War System, Cast System...   
    Global Full
     8.60 

    Descrição
    Estarei disponibilizando um Mapa Global Full + Zao na versão 8.60, à pedido do @rozinx.kungsan.
     
    Modificações que contém no OT
    Ilhas VIPs  Cast System War System Woe Itens Vips (com Id Próprio) (Configurado e Balanceado)  NPCs Modificados   Treiner Offline  Treiners VIP Novas Hunts Invasões automáticas 2 novos addons (Soil Guardian e Entrepreneur)   E muito mais! Cliente 8.60 compatível com os addons e itens editados
    ILHA VIP (Furia)

     

    NPCS (Tibia Addon, Vende Addon por Crystal Coin)

     

    Treiners (ON e OFFline)

     
     


    Itens Vip (Donate) (ID Próprio)

     


    Cliente 8.60 Compatível com : (2 novos addons e itens editados)
    (Para alterar a Imagem do Cliente basta editar ou trocar o Tibia.pic)
     


    2 Novos Addons

         Soil Guardian
     
            Entrepreneur

    Downloads
     
     Global Full 8.60 + DB  ~~~~~~~~~    SCAN   
     Cliente 8.60 Compatível  ~~~~~        SCAN   
     Web-Site     ~~~~~~~~~~~~~         SCAN    
    Source e Distro                                                                
    items.xml Sem itens DONATE
    outfits.xml Sem os dois ADDONS
     
    OBS: A Database que vem junto com o OTSERV é compativel com o WEB-SITE acima.
    Cliente Próprio somente se for usar os itens Donate e os dois Addons que foi adicionado.

    Como Rodar o Servidor + Site
     
     
     
     
  16. Obrigado
    Calisto deu reputação a Marco Oliveira em Attribute Key | Explicações.   
    <attribute key="weight" value="2100"/>  Este atribute é o da o peso do item, ou seja, a magic longsword pesa 43 oz. (Nota 100 = 1 oz) Este atribute é obrigatorio em todos os itens.   <attribute key="defense" value="30"/> Este atribute dá a defesa/def á arma que também é usad em shields.   <attribute key="attack" value="36"/> Atributo que seleciona o ataque da arma.   <attribute key="weaponType" value="sword"/> Este é o atribute que faz a arma ser um axe,sword ou club. No caso a magic longsword é uma sword xD. Se quiser mudar basta mudar o value="sword" para value="axe" ou value="club".   <attribute key="slotType" value="two-handed"/> Este atributo é para que o item seja usado por duas mãos , mais caso queira deixar de 1 mão basta apenas retirar esse atribute1.   <attribute key="elementFire" value="10"/>
    Ela ficará com (atk:45 + 10 fire damage def:40)
    [55-10=45]   <attribute key="extradef" value="1" /> Este atribute da defesa extra ao item, como por exemplo a magic longsword é (atk:55 def:40 +1) e como vocês também já viram em alguma database ou no tibia mesmo itens com esse +1, 2, 3, etc...   <attribute key="slotType" value="ammo"/>
    Com este atribute a arrow deve ficar no lugarzinho da flecha para ser usada.

    <attribute key="hitChance" value="90"/>
    A chance de sucesso do player de acertar o alvo, ou seja, o player com uma arrow tem 90% de chance de acertar um Dwarf por exemplo.

    <attribute key="ammoType" value="arrow"/>
    Neste atribute ou você coloca arrow que será utilizado apenas por Bows/Arcos ou bolt que será apenas usado por Crossbow/Besta.

    <attribute key="shootType" value="arrow"/>
    Animação no qual a flecha aparecerá indo em direcção ao alvo.   <attribute key="weaponType" value="distance"/>
    Come este atribute a bow fica sendo uma arma de distância

    <attribute key="ammoType" value="arrow"/>
    Usando este atribute a bow precisará de algum tipo de arrow para atirar.

    <attribute key="range" value="6"/>
    Com este atribute você determina a distancia da qual ele pode atirar, ou seja, a bow pode atirar a 6 quadrados de distância.   <attribute key="breakChance" value="10"/> Essa atribute dá a spear uma chance (10%) de quebrar a cada hit.

    <attribute key="ammoAction" value="moveback"/>
    Esse atribute faz com que a spear em vez de ficar no chão volte para sua mão sem ter que usar o atribute de charges.
     
      <attribute key="charges" value="50"/>
    Esse atribute dá a quantidade de cargas/charges ao amuleto.

    <attribute key="showcharges" value="1"/>
    Essa atribute serve para quando o player der look no amuleto mostrar a quantidade de charges ele tem.   <attribute key="showattributes" value="1"/> Esse atribute serve para mostrar tudo que ele absorve.

    <attribute key="absorbPercentAll" value="5"/>
    Esse attribute serve para o amuleto absorver todos os tipos de danos em 5%.
    Caso queira que absorva um elemento em especifico aqui vai uma lista:
      <attribute key="duration" value="300"/>
    Essa atribute dá o tempo que o item durará equipado, ou seja, o power ring dura 30 minutos (Nota 10 = 1 min)

    <attribute key="decayTo" value="0"/>
    Essa atribute faz com quer, quando o tempo do power ring acabar ele "some"

    <attribute key="transformDeEquipTo" value="2166"/>
    Essa atribute diz em qual item ele tranformará quando desequipar o power ring.
    Recomendo não mexer ai.   <attribute key="skillFist" value="5"/> Essa atribute aumenta seu Fist Fighting em 5 pontos.

    <attribute key="showduration" value="1"/>
    Esse atribute serve para quando o player der look no ring mostrar quando tempo ele ainda tem.
    Recomendo de novo que não mexa ai.

    <attribute key="manashield" value="1"/>
    Esse atribute faz com que o player fique em estado de "utamo vita".
    Não precisa mexer no "1".

    <attribute key="healthGain" value="1"/> -- HP ganho
    <attribute key="healthTicks" value="3000"/> -- Tempo nescessario (1000 = 1 segundo)
    Esses atributes tem que ser usados em conjunto.
    Eles fazem com que você recupera 1 de HP a cada 3 segundos.

    <attribute key="manaGain" value="4"/> -- MP ganho
    <attribute key="manaTicks" value="3000"/> -- Tempo nescessario (1000 = 1 segundo)
    Esses atributes tem que ser usados em conjunto.
    Eles fazem com que você recupera 4 de MP a cada 3 segundos.

    <attribute key="speed" value="20"/>
    Esse atribute aumenta a velocidade em "20" niveis, se quiser aumentar ou diminuir você ja sabe como xD

    <attribute key="skillSword" value="4"/>
    Essa atribute aumenta seu skill de sword em +4

    <attribute key="skillAxe" value="4"/>
    Essa atribute aumenta seu skill de axe em +4

    <attribute key="skillClub" value="4"/>
    Essa atribute aumenta seu skill de club em +4

    <attribute key="skillShield" value="4"/>
    Essa atribute aumenta seu skill de shield em +4

    <attribute key="suppressDrunk" value="1"/>
    Essa atribute deixa você imune a ficar bebum/bêbado/tonto/drunk/ etc... o.o'

    <attribute key="invisible" value="1"/>
    Essa atribute deixa você invisivél como se estivesse usando "utana vid"
     
    <attribute key="containerSize" value="20"/> -- é só aumentalo ou diminuilos
    É esse atribute que dá slots pras backpacks e bags.
    No caso a Crown backpack tem 20 slots.
  17. Gostei
    Calisto recebeu reputação de KotZletY em [Aula 5] Variáveis e Comentários   
    Ata, entendi, esqueci só de identificar que aquilo ali seria uma string xD, obrigado pelo apoio, apenas estou começando.
  18. Gostei
    Calisto deu reputação a MaXwEllDeN em {Simple} Level Points   
    #Introdução

    Este é um sistema muito simples e básico que eu fiz baseando-me no jogo Mu Online, no qual ao avançar de nível você ganha pontos que podem ser distribuídos para aumentar seus "stats".



    #Instalação




    Faça o download do sistema e cole na pasta do seu servidor.

    @Creaturescripts

    Depois abra a pasta creaturescripts/scripts que fica dentro da pasta data do seu servidor, abra o arquivo login.lua, com algum editor de texto, e lá no final antes do último return true cole a seguinte linha:


    registerCreatureEvent(cid, "PointSystem") #Configuração No arquivo PointsSystem.lua da pasta lib L_LvlPoints = { vocPoints = { -- [Skill] = Pontos que ganha, [1] = 3, [2] = 3, [3] = 3, [4] = 5, [5] = 5, [6] = 5, [7] = 5, [8] = 8, }, entre Colchetes fica o id da vocation, e depois do sinal de igualdade a quantidade de pontos que ele ganhará por level que for upado. attributes = { ["vitalidade"] = {np = 2, vl = 5, nm = "Hit Points"}, -- Precisa usar 2 points para adicionar 10 de hp ["energy"] = {np = 4, vl = 2, nm = "Mana Points"}, ["magic"] = {np = 30, vl = 1, nm = "Magic Level"}, ["shielding"] = {np = 40, vl = 1, nm = "Shielding Skill"}, ["sword"] = {np = 20, vl = 1, nm = "Sword Skill"}, ["axe"] = {np = 20, vl = 1, nm = "Axe Skill"}, ["club"] = {np = 20, vl = 1, nm = "Club Skill"}, ["distance"] = {np = 20, vl = 1, nm = "Distance Skill"}, } np - quantidade de pontos para adicionar o stat vl - quanto vai adicioanar pelo np. Exemplo: ["vitalidade"] = {np = 2, vl = 5, nm = "Hit Points"}

    Com 2 pontos eu compro 5 de HP

    É isso ai galera, bye bye
  19. Gostei
    Calisto deu reputação a MaXwEllDeN em [Aula 3] Primeiros Passos   
    << Aula 2 - Lógica da programação
     
     
     
     
    Primeiros Passos
     
     
     
     
    Aula 3
     
     
     
    Relembrando o que eu disse na primeira aula, você precisará de um interpretador Lua e é muito recomendado que possua também um bom editor com suporte à sintaxe Lua, então nosso primeiro passo será obter o editor e o interpretador.
     
    As aulas serão voltadas ao scripting para Open Tibia Servers, então nada melhor do que um bom OTServer para testar seus scripts, mas ficar testando os scripts em um OTServer pode ser uma tarefa cansativa e demorada, então vamos usar também scripts fora de OTServers para praticar. Para isso, você pode fazer o download de qualquer um dos seguintes programas:
     
     
    Editores + Interpretadores:
    SciTE Scintilla [Avançado] OTScript Live! [Recomendado]  
    Editores:
     
    Notepad++  
    Interpretadores:
     
    Lua [Oficial]  
    Depois que você tiver seu editor e interpretador Lua (Recomendo o OTScript Live!), instale ele. No caso do OTScript Live!, depois de descompactar, vá em "Help", no menu, e clique em "Register To Lua". Abrirá uma caixa confirmando a alteração, basta apertar "OK" e todos os seus scripts irão abrir com o OTScript Live!.
     
    Testando seus scripts!
    No caso do SciTE, para testar o seu script você deve primeiro salvá-lo com a extensão Lua (*.lua). No caso do SciTE e do OTScript Live! você pode testar seu script apenas apertando F5, sendo que no OTScript Live! não é necessário salvar o script antes de testar.
     
    Após pressionar F5, o SciTE irá abrir uma área de textos abaixo da área de edição com as informações do teste, e o OTScript Live! vai abrir uma janela.
     
    Para testar se o seu SciTE ou OTScript Live! está funcionando, use o seguinte script:
     
     
      print("Hello world!") Nas informações mostradas pelo interpretador deve estar escrito "Hello world!". Se aparecer, parabéns, você testou o seu primeiro script Lua...  (ou não )
     
     
    O que o script fez? o0
     
    Uma das coisas mais importantes nos scripts são as funções. Uma função é "um bloco de código previamente pronto", uma subrotina, que quando chamada executa esse bloco. Imagine as funções como um atalho para executar alguma coisa. Pode ser usada, por exemplo, para encurtar scripts que tenham alguma parte do codigo que se repita muitas vezes. Criando uma função você pode usar esse código que se repete muitas vezes somente uma vez (Dentro da função), então em vez de usar esse bloco várias vezes, você só precisaria chamar a função várias vezes.
     
    Você pode criar suas próprias funções, mas isso veremos mais para frente. Tudo o que importa agora é aprender a chamar funções.
     
      O "Nome da Função", na verdade, é o nome da variável em que está armazenada a função, mas não se preocupem com isto ainda... O "Nome da Função" é o nome que você deve chamar para que a função ocorra, pois há vária funções (Obviamente), então você deve especificar qual função quer chamar. É a mesma coisa do que ter 3 pessoas. Quando quiser chamar uma das pessoas, deve dizer o nome dela.   Os argumentos são as "Respostas" para as "Perguntas" da função chamada. A maioria das funções faz "perguntas". No caso da função "print", ela nos "perguntou" o que queriamos escrever na tela, e "respondemos": "Hello world!".   É importante lembrar que cada pergunta deve ser respondida adequadamente, por exemplo, se alguém te pergunta: "Que horas são?" você não pode responder: "Sim.". A mesma coisa acontece com as funções, você deve responder exatamente o que ela está perguntando. Outra observação importante é que você deve responder as perguntas da função na ordem em que foram perguntadas. Se a pergunta nº 1 for "Que horas são?" e a nº 2 for "Quer um biscoito?", você deve responder respectivamente que horas são e se você quer um biscoito.     OBS: Algumas funções fazem "perguntas" opcionais, ou seja, você pode ou não responder. Se você não "responder", a própria função atribuirá um valor padrão para a resposta.   Os parâmetros são simplesmente o conjunto de todos os argumentos.   OBS: Todos os argumentos (Respostas) do parâmetro devem estar entre parênteses e ser separados por vírgulas!     Tipos de valores!   Bem, como eu disse, cada resposta deve seguir o tipo da pergunta, então vou citar aqui os tipos destes valores.   OBS: Existe uma função para descobrir o tipo de cada valor! Esta função é a função type(valor)...       Numbers   Como o nome diz, numbers são números, não há muito o que falar sobre eles...   Exemplo: print(1) print(2) print(3) OBS: A função print aceita todos os tipos como resposta.
     
    Strings  
    As strings devem iniciar com um símbolo especial e deve terminar com o mesmo caractere que foi usado para iniciar a string. Esses símbolos são:
     
    Apóstrofo: Começa com ' e termina com '.
    Aspas: Começa com " e termina com ".
    Colchete-Colchete: Começa com [[ e termina com ]].
    Colchete-Igual-Igual-Colchete: Começa com [==[ e termina com ]==].
     
    As strings são conjuntos de caracteres, como letras, números (Não são numbers, pois se houver um número entre os símbolos especiais será tomado como string!!!), acentos, espaços, etc... Se você quiser escrever uma frase na tela, por exemplo, não pode deixá-la solta pelo script. Esta frase deve ser uma string, ou o script dará erro.
     
    Exemplo:
    print('Apóstrofos') print("Aspas") print([[Colchete-Colchete]]) print([==[Colchete-Igual-Igual-Colchete]==]) OBS: 1 << Isto é um number.
    "1" << Isto é uma string.
     
    Booleanos  
    Os booleanos podem assumir apenas dois valores: true e false.
    true: Valor verdadeiro.
    false: Valor falso.
     
    OBS: Os booleanos podem ser complicados de entender no começo, mas com o tempo você acostuma. Não se preocupe com eles agora...
     
    Exemplo:
      print(true) print(false) print(nil)  
     
    Functions  
    Exatamente o que o nome diz: é o que estamos vendo agora. Functions são nada mais nada menos do que funções.
     
     
    Exemplo:
      print(function() end) OBS: Não se preocupe com isso ainda!
     
    Tables ou Arrays  
    São tabelas, ou seja, armazenam mais do que um valor dentro de uma "caixa". Tabelas podem armazenar outras tabelas e todos os valores dentro de uma tabela possuem um identificador, chamado "index" (índice).
     
    Tabelas começam com o símbolo { (Chave) e terminam com o símbolo } (Chave).
     
    Exemplo:
    print({})  
    Userdata  
    Lua é uma linguagem de programação criada para dar extensão à linguagem de programação C e C++. Userdatas são ponteiros que indicam valores em C ou C++. Não se preocupe com eles.
     
     
    Nil  
    Nil simboliza um valor nulo. Não deixa de ser um valor, mas é um valor sem conteúdo.
     
    Exemplo:
    print(nil)  
    As funções retornam!
     
    Toda função retorna um ou mais valores, nem que sejam valores nulos (nil), portanto você pode usar uma função dentro do print para escrever os valores que a função retornar! Vamos usar como exemplo a função type(valor), que vai nos retornar uma string com o tipo do valor.
      Exemplo: print(type(1))  
     
    O exemplo acima vai escrever em sua tela a frase: "Number", pois 1 é um number!
     
     
    Exercícios:
    Usando a função print para escrever na tela e type para pegar o tipo de algum valor, obtenha as seguintes frases na tela:
     
     
    Resposta:
     
     
     
     
    Essa aula foi escrita por uma raposa levada Skyen Hasus, todos os créditos são dele.
     
     
     
     
     
     
    Aula 4 - Operadores e Bibliotecas >>
  20. Gostei
    Calisto deu reputação a ViitinG em Teleport Scroll System   
    Para quem não sabe como funciona o script : Ao dar use em um item writable no caso 1949(configurável),você pode escrever o local que deseja ser teleportado e clicar em OK para ser teleportado para o local,ao ser teleportado o player deve esperar 30 segundos(configurável) para usar novamente o Teleport Scroll.
    (Testado em 0.3.6 [8.54] e ultima REV da TFS [9.1])
     


    Exemplo :
    Para você ser teleportado para o trainers,basta escrever Trainers e clicar em OK.

    Clicando em OK você será teleportado para os trainers e terá que esperar 30 segundos para usar o Teleport Scroll novamente.
     

    •   Adicionando o script   •
     
    "data/creaturescripts/scripts/tsviiting.lua" :
    local t = { ["Temple"] = {pos = {x = 1000, y = 1000, z = 7}, storage = 79402, time = 30}, ["Teleports"] = {pos = {x = 2000, y = 2000, z = 7}, storage = 79402, time = 30}, ["Trainers"] = {pos = {x = 3000, y = 3000, z = 7}, storage = 79403, time = 30} } function onTextEdit(cid, item, newText) if item.itemid == 1949 then if isPlayerPzLocked(cid) then doCreatureSay(cid, "Voce esta com battle!", TALKTYPE_MONSTER) return false end if isInArray({'locations', 'places', 'place'}, newText) then local i = '' for text, x in pairs(t) do i = i .. "\n[" .. text .. "]" end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Locais de teleportes: " .. i) else local p = t[newText] if not p then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Local invalido") return false end local st = p.storage if getCreatureStorage(cid, st) > os.time() then doCreatureSay(cid, "Voce precisa esperar " .. getCreatureStorage(cid, st) - os.time() .. ' segundo(s)' .. (getCreatureStorage(cid, st) - os.time() == 1 and "" or "s") .. " para teleportar novamente.", TALKTYPE_MONSTER) return true end local ti = p.time local pos = p.pos doTeleportThing(cid, pos, true) doSendMagicEffect(pos, CONST_ME_TELEPORT) doCreatureSetStorage(cid, st, os.time() + ti) doCreatureSay(cid, "Voce foi teleportado!", TALKTYPE_MONSTER) end end return true end  
    "data/creaturescripts/creaturescripts.xml" :
    <event type="textedit" name="TSViitinG" event="script" value="tsviiting.lua"/> "data/creaturescripts/scripts/login.lua" :

    registerCreatureEvent(cid, "TSViitinG") Creditos : J.Dre / Sonik / Fallen / Shinmaru / ViitinG
     
    • Configurando •
     
  21. Gostei
    Calisto deu reputação a xWhiteWolf em Critical Skill System   
    Fala galera do TK, vejo que tem bastante gente procurando esse sisteminha que é praticamente igual ao dodge system, então eu decidi fazer visto que na realidade era só mudar 3 linhas kkkk em todo caso ta aí pra quem quiser:

    creaturescripts.xml:
     <!-- CRITICAL SYSTEM -->    <event type="statschange" name="critical" event="script" value="critical.lua"/> creaturescripts\scripts\login.lua:
    --- CRITICAL SYSTEM ---- registerCreatureEvent(cid, "critical") if getPlayerStorageValue(cid, 48913) == -1 then         setPlayerStorageValue(cid, 48913, 0)      end creaturescritps\scripts\critical.lua:
    --[[Critical System -------------------------  By Night Wolf]] local lvlcrit = 48913 local multiplier = 1.5 function onStatsChange(cid, attacker, type, combat, value) if isPlayer(attacker) and (not (attacker == cid)) and (type == STATSCHANGE_HEALTHLOSS or type == STATSCHANGE_MANALOSS)  then if (getPlayerStorageValue(attacker, lvlcrit)*3) >= math.random (0,1000) then dano = math.ceil(value*(multiplier)) doTargetCombatHealth(attacker, cid, combat, -dano, -dano, 255) doSendAnimatedText(getCreaturePos(attacker), "CRITICAL!!", 144) return false end end return true end lvlcrit é o storage que fica salvo o seu level de critical e multiplier é o multiplicador do dano para ataques críticos.. nesse caso um ataque critico vai ser 1,5 vezes maior doque um ataque normal (50% maior)

    Agora em actions.xml adicione:
    <action itemid="1294" script="criticalrock.lua"/> e em actions\scripts\criticalrock.lua adicione:
    --- CRITICAL System by Night Wolf       local config = {    effectonuse = 14, -- efeito que sai    levelscrit = 100,  --- leveis que terão    storagecrit = 48913 -- storage que será verificado    }     function onUse(cid, item, frompos, item2, topos)     if getPlayerStorageValue(cid, config.storagecrit) < config.levelscrit then    doRemoveItem(item.uid, 1) doSendMagicEffect(topos,config.effectonuse) doPlayerSendTextMessage(cid,22,"You've Leveled your Critical Skill to ["..(getPlayerStorageValue(cid, config.storagecrit)+1).."/"..config.levelscrit.."].") setPlayerStorageValue(cid, config.storagecrit, getPlayerStorageValue(cid, config.storagecrit)+1) elseif getPlayerStorageValue(cid, config.storagecrit) >= config.levelscrit then doPlayerSendTextMessage(cid,22,"You've already reached the MAX level of Critical Skill.\nCongratulations!!!!")     return 0     end return 1 end Feito isso tá pronto, pra editar o item que dá a skill de critical vc edita no actions.xml mesmo:
    <action itemid="1294"   << ID do item que será usado pra dar a skill.
    A config tá bem simples:
    effectonuse = 14, -- efeito que sai
       levelscrit = 100,  --- leveis que terão 
       storagecrit = 48913 -- storage que será verificado.

    Lembrando que cada pedra utilizada dará 0,3% a mais de chance.. 10 pedras dão 3% de chance de dar critico a cada ataque e 100 pedras (NIVEL MÁXIMO PADRÃO) dará 30% de chance de dar crítico em cada ataque.
    Espero que vcs gostem, qualquer coisa deixem os comentários aqui.

    Obs: aqui tá uma foto


    Note que esse script só funciona em players, se vc quiser que funcione em monstros você vai ter que abrir um por um todos os monstros do server e colocar essa tag aqui: 
    <script> <event name="critical"/> </script> coloque antes de  </monster>
    Minha dica: coloquem apenas no Trainer pra que o player consiga ver que ele tem o critical e quanto ele tira e deixem avisado que o sistema só vai funcionar em players. 
  22. Gostei
    Calisto deu reputação a Renato em Callbacks   
    ACTIONS


    onUse(cid, item, fromPosition, itemEx, toPosition)
    onLogin(cid)
    onLogout(cid)
    onAdvance(cid, skill, oldLevel, newLevel)
    onStatsChange(cid, attacker, type, combat, value)
    onDirection(cid, old, current)
    onOutfit(cid, old, current)
    onSendMail(cid, receiver, item, openBox)
    onReceiveMail(cid, sender, item, openBox)
    onTradeRequest(cid, target, item)
    onTradeAccept(cid, target, item, targetItem)
    onJoinChannel(cid, channel, users)
    onLeaveChannel (cid, channel, users)
    onLook(cid, thing, position, lookDistance)
    onThink(cid, interval)
    onTextEdit(cid, item, newText)
    onReportBug(cid, comment)
    onAreaCombat(cid, tileItem, tilePosition, isAggressive)
    onPush(cid, target)
    onTarget(cid, target)
    onFollow(cid, target)
    onCombat(cid, target)
    onAttack(cid, target)
    onCast(cid, target)
    onKill(cid, target, lastHit)
    onDeath(cid, corpse, deathList)
    onPrepareDeath(cid, deathList)
    [/code] [center][/center] [center][size=8]GLOBAL EVENTS[/size][/center] [code]onThink(interval)
    onStartup()
    onShutdown()
    onGlobalSave()
    onRecord(current, old, cid)
    onTime() onStepIn(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    onStepOut(cid, item, position, lastPosition, fromPosition, toPosition, actor)
    onEquip(cid, item, slot)
    onDeEquip(cid, item, slot)
    onAddItem(moveItem, tileItem, position, cid)
    onRemoveItem(moveItem, tileItem, position, cid)[/code] [center][/center] [center][size=8]SPELLS[/size][/center] [code]onCastSpell(cid, var) onSay(cid, words, param, channel) onUseWeapon(cid, var)



    • Retirado do SCRIPTSYSTEM_HELP, doc das Sources do TFS
    CREATURE SCRIPTS MOVEMENTS TALKACTIONS WEAPONS
  23. Gostei
    Calisto deu reputação a Kimoszin em Criando Spells para seu servidor!   
    Ola gaaaaaaalera, é com muito prazer que venho trazer esse primeiro tutorial meu como Aprendiz do TibiaKing,

    Spells:
    Bom, spells sao as magias do nosso servidor, elas servem tanto para healar, atacar, dar suporte e etc ...
    Criar magias é algo muito simples, vc mesmo poderam criar quantas magias quiserem para o seu servidor seguindo esse tutorial,
    Muito bem, vamos começar ...

    Spells de Curar (Healing)




    Obrigado a Todos,
    Estou terminando de fazer o SpellMaker para facilitar a vida de vc,
    Abraços
  24. Gostei
    Calisto deu reputação a 3visan em [Aula 1] Introdução   
    Introdução
    Aula 1


    O que é scripting?
    Do modo mais simples possível: scripting é o ato de programar. O nome scripting vem do nome "script".

    O que é um script?
    De um modo geral, um script é um bloco de Código escrito em uma linguagem de programação interpretada, ou seja, ele precisa que alguma coisa leia ele e possa "traduzir" seu conteúdo. Lembre-se de que "script" não é um termo específico de Open Tibia Servers.

    O que é uma linguagem de programação interpretada?
    Os brasileiros falam português, ingleses falam inglês e chineses falam mandarim, e com isso o mundo é composto por várias línguas.

    No mundo da programação não é diferente. Existem várias línguas que podem ser usadas, cada uma com uma característica e modo de escrever diferente (Assim como o português é diferente do inglês).

    Entre estas linguagens, existem 2 tipos: as linguagens interpretadas e as linguagens compiladas (Não-interpretadas). Podemos fazer uma comparação tosca com a vida real: o português seria uma linguagem interpretada (Nosso cérebro precisa "traduzir" a mensagem), e os desenhos seriam a língua compilada (Nosso cérebro reconhece automaticamente a "mensagem" do desenho).

    As linguagens compiladas são aquelas que não precisam ser lidas por nenhum programa, pois "conversam" diretamente com o computador, enquando a linguagem interpretada não consegue se comunicar com o computador, então a linguagem compilada recebe a mensagem do codigo interpretado e traduz numa linguagem que o computador entenda, dai a linguagem interpretada pode conversar com o computador (Desde que alguém traduza suas mensagens).

    Voltando para a parte de Open Tibia Servers, a linguagem compilada é a linguagem usada no seu servidor: o .exe no Windows, por exemplo, e a linguagem interpretada são os scripts .lua. O seu servidor compilado vai ler os scripts .lua e traduzir o conteúdo deles para que o computador possa executar o que o script manda.

    Se os scripts são escritos em linguagens interpretadas, qual é a linguagem dos script usados nos Open Tibia Servers?
    Os Open Tibia Servers usam uma linguagem de programação (Interpretada) chamada Lua, que foi feita aqui no Brasil mesmo.

    Características da linguagem de programação Lua:
    Linguagem de Programação Interpretada
    Linguagem de Programação Imperativa ou Programação Procedural
    Linguagem de Scripts ou Linguagem de Extensão
    Pequena, Fácil, Leve e Eficiente



    " Lua foi criada por um time de desenvolvedores do Tecgraf da PUC-Rio, a princípio, para ser usada em um projeto da Petrobras. Devido à sua eficiência, clareza e facilidade de aprendizado, passou a ser usada em diversos ramos da programação, como no desenvolvimento de jogos (a LucasArts, por exemplo, usou a linguagem no jogo Escape from Monkey Island), controle de robôs, processamento de texto, etc. Também é freqüentemente usada como uma linguagem de propósito geral. "


    Wikipédia - Lua (Linguagem de Programação)

    O que eu preciso para aprender Lua e começar a produzir meus scripts?

    Paciência (Embora seja de fácil aprendizado, você vai levar algum tempo para aprender a linguagem)
    Humildade (Nunca se sinta o melhor, nem ridicularize aqueles que tiverem um conhecimento menor que o seu)
    Vontade (Não adianta fazer as coisas sem o menor interesse, você não chegará a lugar nenhum sem vontade)
    Criatividade (O principal para produzir um script é ter a idéia do que você vai fazer)
    Conhecer a Lógica da Programação (Não se preocupe, eu vou ensinar a Lógica da Programação nas próximas aulas.)
    Interpretador Lua (Para testar seus scripts, claro. Você pode usar o seu OTServer para testar, e ainda usar um interpretador Lua para testar seus scripts simples fora do OTServer)
    Editor Lua (Não é realmente necessário, uma vez que você pode usar um editor de textos qualquer, como o bloco de notas, mas ter um Editor Lua vai ajudar muito, e alguns até vêm com um Interpretador Lua junto!)
    Pagar uma taxa de R$ 700,00, afinal, não estou escrevendo estas aulas de graça! (OK, não precisa pagar nada, mas no mínimo poste seus scripts aqui e ajude a seção a crescer )



    Onde posso encontrar um Interpretador e/ou Editor Lua?
    Como interpretador (No caso de produzir scripts para Open Tibia Servers) você deve usar um servidor próprio, pessoal somente para testar os scripts que você fez, e pode usar também um Interpretador Lua geral, para testar seus scripts fora dos OTServers.
    Como Editor Lua você pode usar qualquer editor de textos, mas eu recomendo usar um editor que seja próprio para a linguagem Lua. Existem dois editores que já vem com um Interpretador Lua "embutido". São eles: OTScript Live! [Download] e SciTE (Scintilla) [Removido].

    Exercício-Tarefa:
    Pesquise mais na internet sobre a linguagem Lua, Scripts, etc...




    Creditos:



    99%: Skyen Hasus



    1% Vittu




    #Aula 2 Logica da Programação
  25. Gostei
    Calisto deu reputação a xWhiteWolf em Mining System   
    Antes de tudo queria agradecer ao cara do suporte que me pediu pra fazer isso, achei muito legal a idéia. Fala galera do TK, vim trazer um script bem simpleszinho mas que abre um leque de opções de RPG e diversão pro seu OT.. Trata-se do Mining System, um sistema que você pode utilizar a pick normal (ou uma outra pick especial) para minerar a terra e tentar conseguir items que você pode trocar por dinheiro, items ou utilizar para craftar items. São 70 leveis de Mining que vão upando conforme vc minera.
    Enfim, vamos ao script:
    actions\scripts\mining.lua:
    terra = {351,352,353,354,355}  levels = { [-1] = 2229, ---- skull [0] = 1294, --- small stone [1] = 3976, --- worm [10] = 2149, -- Small Emerald [12] = 2146, -- Small Sapphire [15] = 2145, -- Small Diamond  [17] = 2150, -- Small Amethyst [20] = 2147, -- Small Ruby [25] = 2144, -- Black Pearls  [27] = 2143, -- White Pearls [30] = 2157, -- Gold Nuggets [35] = 2156, --- red gem [36] = 2158, -- blue gem  [37] = 2155, -- green gem  [38] = 2153, -- violet gem [39] = 2154, -- yellow gem [40] = 7761, -- small enchanted emerald  [42] = 7759, -- Small Enchanted Sapphiire [45] = 7762, -- Small Enchanted Amethyst [50] = 7760, -- Small Enchanted Ruby [70] = 2177  -- Life Crystal } local config = { storage = 19333, chance = 40, --- chance de achar um item ou não k = 2, --- constante de level.. quanto maior, mais fácil é upar. (a fórmula é level ao quadrado dividido pela constante) experience = 19334 } function onUse(cid, item, fromPosition, itemEx, toPosition) local drops = {} function getDrops(cid) for i= -1,getPlayerStorageValue(cid, config.storage) do if levels[i] then table.insert(drops, levels[i]) end end return true end if isInArray(terra, itemEx.itemid) then getDrops(cid) doPlayerSetStorageValue(cid, config.experience, getPlayerStorageValue(cid, config.experience)+1) local experience = getPlayerStorageValue(cid, config.experience) if experience >= (8+(getPlayerStorageValue(cid, config.storage)^2))/config.k then doPlayerSetStorageValue(cid, config.storage, getPlayerStorageValue(cid, config.storage)+1) doPlayerSendTextMessage(cid, 27, "Congratulations, you have leveled! Your currect level is "..getPlayerStorageValue(cid, config.storage) ..".") if getPlayerStorageValue(cid, config.storage) == 50 then doPlayerSendTextMessage(cid, 20, "For reaching level "..getPlayerStorageValue(cid, config.storage) .." you have been awarded with Mining Helmet.") doPlayerAddItem(cid, 7497, 1, true) end end if config.chance >= math.random(1,100) then if #drops >= 1 then local item = drops[math.random(1,#drops)] doPlayerSendTextMessage(cid, 27, "You have found a "..getItemNameById(item)..".") doPlayerAddItem(cid, item, 1, true) end doSendMagicEffect(toPosition, 3) else doSendMagicEffect(toPosition, 2) return true end elseif itemEx.itemid == item.itemid then doPlayerSendTextMessage(cid, 27, "You're currenctly level "..getPlayerStorageValue(cid, config.storage)..".") else return false end return true end em terra vc coloca os ids dos chãos em que é possível minerar, levels é o level da skill e o ID do respectivo item que você fica capaz de conseguir após alcançar esse nível. Em outras palavras, no começo vc só consegue minerar skull, no nv 70 vc vai ter a chance de conseguir todos os items anteriores e não só life crystal. O restante das configurações está no meio do script:
    local config = {
    storage = 19333,
    chance = 40, --- chance de achar um item ou não
    k = 2, --- constante de level.. quanto maior, mais fácil é upar. (a fórmula é level ao quadrado dividido pela constante)
    experience = 19334
    }
    o storage é onde vai salvar o seu nível
    chance é a chance de pegar um item cada vez que minera.
    k é a constante de level, o nivel 10 precisa de 10*10/k de experiencia para ser alcançado (com k sendo 2 dá 50 de experiencia), ou seja, com 50 picaretadas na terra vc pega nivel 10.
    experience é o storage que fica salvo sua experiencia.
    Bônus: Ao alcançar level 50 você ganha o Mining Helmet como prêmio, ele não faz nada de especial mas é como se fosse um troféu. No meu server tem uma série de troféus que voce pode colecionar e fica como sendo uma conquista épica para os players.
    e no actions.xml:
    <action itemid="2553" script="mining.lua"/> OBS: Sugiro que vcs utilizem uma outra pick pra não dar conflito mas você faz oque quiser.
    PS: Uma fotinha pra vcs verem
    Espero que tenham gostado!  

Informação Importante

Confirmação de Termo