Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 12/12/15 em todas áreas

  1. Oneshot

    Vamos Programar? - Introdução

    Vamos Programar? Introdução Olá, pessoal. Acredito que ninguém aqui me conheça, mas sou Oneshot, ou Bruno Lopes, um programador por passatempo. Desenvolvi muitos trabalhos para fóruns em geral, principalmente o XTibia, até que levei uma flecha no joelho... ... Brincadeiras a parte, eu gostaria muito de voltar a escrever tutoriais e quem sabe desenvolver novos recursos para a comunidade, depende muito do meu tempo disponível. Para essa primeira parte do tutorial, eu gostaria de tratar de um assunto que é subestimado por muitos... Não, eu não vou falar de lógica da programação, de Lua, ou de C++... eu vou falar sobre o editor de texto, a principal ferramenta de um programador. Muitos aqui, provavelmente começam sua vida de scripter utilizando o Notepad++ no Windows, ou talvez um gedit em alguns flavors do Linux, talvez até o vim, se você for muito hardcore Eu já usei vários editores de texto, e ultimamente tenho recomendado um editor de texto excelente, desenvolvido pela equipe do Github, chamado Atom. Eu poderia muito bem fazer deste tópico, um comparativo entre os editores de texto e até alguns IDEs (ou Integrated Development Environment), mas vou fazer deste, um tutorial para configuração do Atom e espero que vocês gostem. Atom Atom, conforme o criador, é um editor de texto totalmente personalizável, você pode editar todos os tipos de configurações dentro dele, mas também se não quiser, não é necessário. E acho que esse é o diferencial do Atom, existem muitos plugins de excelente qualidade, e você não vai precisar usar ele só para programar Lua, pode usar ele em um monte de sintaxes diferentes e se ele não tiver uma sintaxe, basta baixar um plugin que certamente existirá com a sintaxe, snippets (trechos de código pré-configurados), entre outros. Você vai baixar o Atom no site deles, http://atom.io/, no momento que escrevo esse artigo/tutorial, estou no Windows 10 (Ao invés do Fedora), então veja abaixo: Depois de baixar o instalador para sua plataforma (Ele está disponível para Windows, Linux e Mac), basta instalar o aplicativo, conforme os padrões do seu sistema (Next, Next, Next no Windows e por aí vai) Depois disso o Atom é apresentado da seguinte forma: Não tão dessa forma... estou com o tema da interface Seti-UI. Se você for curioso, pode então ler a documentação do Atom, e eu recomendo, pois você vai aprender muito lá, e se tiver noções de programação, já poderá aprender a personalizar seu Atom. Vamos baixar alguns plugins, para isso você pode ir no menu Packages > Settings View > Install Packages/Themes ou pressionar Ctrl+Shift+P (No caso do Windows), digitar Install e escolher a opção, e eu uso muito essa segunda forma: No menu que irá abrir, você pode procurar diversos plugins e temas, na página inicial ele mostra os plugins em destaque: Daqui não tem segredo, pesquise o nome do plugin, ele vai aparecer e então clique em Install, abaixo deixo alguns plugins que eu uso, e nem todos são voltados para Open Tibia. Plugins​Open Recent - Abre arquivos recentes Minimap - Mostra um minimapa com todo o código do arquivo Highlight Selected - Quando você seleciona uma palavra, ele seleciona todas as ocorrências Pigments - Voltado para Front-End, mostra a cor de um código hexadecimal de um arquivo CSS Linter* - Uma função muito presente em IDEs, que mostra algum erro no código, como um ';' faltando Auto-Detect-Indentation - Detecta a indentação de um arquivo e configura a indentação do seu TAB automaticamente) Atom-Beautify - Um "embelezador" de código Emmet - Para front-ends preguiçosos. language-lua - Para adicionar a sintaxe Lua no atom ​Temas​Seti-UI - Um excelente tema com ícones para cada tipo de arquivo. Atom-Monokai - Um tema de sintaxe bem parecido com o Sublime. E tem muitos outros plugins excelentes... No caso do Linter, você precisa baixar o plugin principal, e então o plugin secundário para a linguagem que você pretende utilizar (Não sei se existe um Linter para Lua) Depois disso, você pode ir na opção Themes e mudar o tema de interface e de sintaxe: E por último, mudar algumas configurações a seu gosto: Cada configuração tem sua explicação em inglês. Esse é o Atom, configurado com os plugins do tutorial, com sintaxe Lua, a linha branca cruzando o arquivo é um separador que delimita 80 caracteres e quebra o código que passar disso, dando mais legibilidade. E o mais legal é que o Atom tem um modo de identificar funções diferente do Notepad++, então ele identifica até as funções Open Tibia no seu código. Legal, né? Conclusão Bom, é isso aí, esssa foi a primeira parte de uma sequência de tutoriais que pretendo fazer quando tiver tempo livre, afinal não consigo largar o Open Tibia. Espero que gostem. Abraços.
    2 pontos
  2. Bluester

    [MÓDULO] Tutorial In-Game

    Eae galera do xtibia, hoje venho apresentar à vocês meu primeiro post, um módulo de Tutorial no OTC, parecido com o da PXG que você pode usar e customizar, basta ter um pouco de conhecimento ! (Se estiver em área errada peço que movam) Print: Bom, o script está pronto, mas se quiser editar, mexa apenas em configs_pt e em configs_en, nesses 2 arquivos, vocês editem o que quiserem e na pasta imgs vocês colocam as imagens (caso editem) na mesma resolução ! Link de download do módulo: Scan: Arquivos estão ocultos, para conseguir habilitar no Windows 7: Arquivos estão ocultos, para conseguir habilitar no Windows 8: Bom é só isso, até a próxima ! Créditos: Pokémon Waterfall por algumas partes dos scripts e imagens. WOP por algumas partes dos scripts e imagens. PXG por algumas imagens.
    1 ponto
  3. Administrador

    Map editor e Item editor 10.90!

    Todos conhecem esse magnífico editor, não? Saibam que já está disponível a versão que suporta o último protocolo do tibia (10.90). Para baixar o programa clique aqui Créditos aos grandes: Mignari @Bruno Para baixar o Map Editor, clique aqui. Créditos Colaboradores - Projeto Oficial @Bruno
    1 ponto
  4. Administrador

    10.80+ Medusa Tower

    Medusa Tower Coordenadas: x:32872 y:32833 z:7 Medusa Tower 10.80+.rar Scan
    1 ponto
  5. Caronte

    (SoT) Script of Tales #01

    Bem vindos! Bem vindos... Á primeiríssima edição do SoT! Se você é scripter, gosta de um desafio e curte interagir com a comunidade, então participe deste evento. O evento SoT tem como objetivos promover a interação entre scripters da comunidade, dar a oportunidade de membros conquistarem prêmios e trocar conhecimento sobre a área. Aproveitando o espírito natalino com essa edição mega criativa, espero ver bastante participantes. Calendário 11/12/2015 - Lançamento e Início 05/01/2016 - Prazo para enviar o script 05-07/01/2016 - Avaliações dos jurados 07-08/01/2016 - Resultado Premiação 1º Lugar • Indicação à xTibia Gold Achievement 2015 (Conquista Exclusiva) • O Melhor Scripter (Conquista exclusiva) • Gold (Conquista) • 25 Rep 2º Lugar • Indicação à xTibia Silver Achievement 2015 (Conquista Exclusiva) • Silver (Conquista) • 15 Rep 3º Lugar • Bronze (Conquista) • 10 Rep Regras • Aplicam-se as regras gerais do fórum neste evento • Em caso de plágio, o participante será eliminado e poderá ser punido • Calendário, premiação e regras estão sujeitos a mudanças • Todos os trabalhos serão liberados à comunidade depois do evento
    1 ponto
  6. Gabrieltxu

    (SoT) Script of Tales #01

    Curti a historia , da para fazer muita coisa legal com o tema , bom talves irei participar , se me sobrar algum tempo xD , boa sorte a todos os competidores
    1 ponto
  7. chauz

    [Show Off] Beto

    Comentar aqui só para reativar essa conta.. Os mapas estão muito bons, da fazer uma análise legal nesse trabalho que você faz com os formatos e bordering (sei que demanda muito tempo) e, no seu caso, ficam excelentes. Grande abraço manin, continue trazendo mapas assim!!
    1 ponto
  8. Oneshot

    Vamos Programar? - Introdução

    Sim, mas o Brackets é voltado totalmente para front-end
    1 ponto
  9. local errado ja que aqui eh a seçao de tibia global!
    1 ponto
  10. function onStepIn(cid, item, position, fromPosition) local config = { msgDenied = "Você não e vip II , faça a quest vip II ", msgWelcome = "Seja Bem Vindo a Area vip II." } if getPlayerStorageValue(cid, 13540) <= 0 then doTeleportThing(cid, fromPosition, true) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, config.msgDenied) doSendMagicEffect(getThingPos(cid), CONST_ME_MAGIC_BLUE) return TRUE end doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, config.msgWelcome) return TRUE end
    1 ponto
  11. Gabriel Couto

    [Danera] Theus Stor [LV: 17]

    Boa sorte! Se é que precisa né, com esses itens hahaha
    1 ponto
  12. Cara, está ai o seu problema! substitui por este código: local config = { savePlayer = true } function onAdvance(cid, skill, oldLevel, newLevel) if(skill == SKILL__EXPERIENCE) then return true end if(config.savePlayer) then doPlayerSave(cid, true) end return true end Pronto '-' Problema resolvido kk
    1 ponto
  13. Kluivert

    Novos Estagiários

    Gostei dos mapas ... parabéns aos dois novos estagiários!
    1 ponto
  14. Gwix

    Show Off (Gwix)

    Realmente, a Zanknore antiga possuía apenas 1 estátua dwarf no templo, e pelo fato de ser sujo o pessoal acha que isso é característico. RPGísticamente falando (nisso eu me baseio em LOTR, porque o Tibia também tem muita ligação com o LOTR = Lord of the Rings) Os anões possuem construções lindas e grandiosas, porém rústicas, isso que eu quis incorporar na nova Zanknore, incrementando gemas e etc, as paredes escolhidas não foram escolhidas à toa, nelas tem escrituras rúnicas dos anões (Onde Tolkien se inspirou no alfabeto Futhark - Viking). Na verdade acho que o pessoal não gostou muito da entrada e achou o mapa todo seria daquela forma. Vou postar um mapa de uma forma diferente hoje
    1 ponto
  15. MatheusGlad

    [elf bot] Hotkey Para Resetar

    auto 200 if [$level >= 717217] say '!reborn'
    1 ponto
  16. Já que você não mencionou a base utilizada, irei supor que é PDA. data/lib/pokemon moves.lua: elseif spell == "Outrage" then local config = { outfit = { --["pokemon_name"] = outfit, ["Salamence"] = xxx, }, AOE = { times = 2, --Quantas vezes o golpe AOE será usado. interval = 3000, --Intervalo de tempo, em milésimos de segundo, entre cada golpe AOE. combat = DRAGONDAMAGE, --Elemento. spell = { --Uma tabela deverá ser configurada com a área e efeito da parte com socos, e a outra com a parte do efeito do Draco Meteor. {area = OutrageArea1, effect = xxx}, --{area = área do dano AOE, effect = efeito} {area = OutrageArea2, effect = xxx} }, } } local function doOutrage(cid, times) if not isCreature(cid) then return true end for i = 1, #config.AOE.spell do doMoveInArea2(cid, config.AOE.spell[i].effect, config.AOE.spell[i].area, config.AOE.combat, min, max, spell) end times = times - 1 if times <= 0 then local rounds = math.random(4, 7) rounds = rounds + math.floor(getPokemonLevel(cid) / 35) local ret = {} ret.id = cid ret.cd = rounds ret.check = getPlayerStorageValue(cid, conds["Confusion"]) ret.cond = "Confusion" doCondition2(ret) return true end addEvent(doOutrage, config.AOE.interval, cid, times) end local ret = {} ret.id = cid ret.cd = config.AOE.interval / 1000 * config.AOE.times ret.eff = 0 ret.check = 0 ret.buff = spell ret.first = true doCondition2(ret) doSetCreatureOutfit(cid, {lookType = config.outfit[getCreatureName(cid)]}, config.AOE.interval * config.AOE.times) addEvent(doOutrage, config.AOE.interval, cid, config.AOE.times) areas.lua: OutrageArea1 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 2, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } OutrageArea2 = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}, {0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } newStatusSyst.lua, abaixo de: if buff == "Strafe" or buff == "Agility" then setPlayerStorageValue(cid, 374896, 1) --velo atk --alterado v1.6 doRaiseStatus(cid, 0, 0, 100, a) coloque: elseif buff == "Outrage" then doRaiseStatus(cid, 0, 1.4, 0, a)
    1 ponto
  17. IoriOtserv

    Tree Cut System

    Boa Tarde Galera, Hoje venho postar um sistema adaptado que eu desenvolvi. Basicamente eu peguei o sistema de Minning existente no servidor postado pelo Vmspk (http://www.xtibia.co...60-azeroth-rpg/) e modifiquei para corte de árvores ao invés de minério de stones. Bom, vamos ao que interessa: Para quê serve este sistema? R: Ele é um sistema secundário voltado para enfatizar o RPG de servidores, no meu servidor eu o utilizo para obtenção de material para forja. Utilize sua criatividade para implementá-lo no seu servidor. Ele funciona em quais versões de Open Tibia? R: Só testei na versão 9.6 até agora, peço que vocês postem caso estejam conseguindo utiliza-lo em outras versões. primeiramente você precisa adicionar um arquivo chamado cutsystem.lua com o seguinte dentro: local configs = { sign = {{level = {1,99}, quant = {1,2}, percent = 25}, {level = {100,120}, quant = {1,5}, percent = 35}, {level = {121,130}, quant = {1,7}, percent = 45}, {level = {131,140}, quant = {1,8}, percent = 65}, {level = {141,149}, quant = {1,9}, percent = 70}, {level = {150}, quant = {1,10}, percent = 100}}, trees = {2708, 2768, 2767, 2702, 2785, 2700, 2707, 2711, 2706, 2707, 2705, 2719, 7024, 5156, 5157, 2697, 2698, 2701, 2702, 2703, 2704, 2707, 2712, 2718, 2719, 2720, 2709, 2710, 2722, 2725, 2726, 2770, 2786, 4006, 4007, 4008, 4009, 4010, 7020, 7021, 7022, 7023}, wood = {{5901, 'all'}}, tree_delay = 5, --[em minutos MaxLevel = 150, breakChance = 0 } --END Configs-- function onUse(cid, item, fromPosition, itemEx, toPosition, onUse) local STORAGE_SKILL_LEVEL = 20000 local STORAGE_SKILL_TRY = 20001 local skillLevel = getPlayerStorageValue(cid,STORAGE_SKILL_LEVEL) local skillTry = getPlayerStorageValue(cid,STORAGE_SKILL_TRY) local objeto2 = getThingFromPos(toPosition) local player = (cid) if skillLevel == -1 then setPlayerStorageValue(cid,STORAGE_SKILL_LEVEL,1) end for Q = 1, #configs.sign do if configs.sign[Q].level[2] == nil then configs.sign[Q].level[2] = configs.sign[Q].level[1] end if skillLevel >= configs.sign[Q].level[1] and skillLevel <= configs.sign[Q].level[2] then quant = math.random(configs.sign[Q].quant[1],configs.sign[Q].quant[2]) percent = configs.sign[Q].percent break end end for i = 1, #configs.trees do if objeto2.itemid == configs.trees[i] then if math.random(1,100) <= configs.breakChance then doPlayerSendCancel(cid,"Your axe has broke") doSendMagicEffect(toPosition, 3) doRemoveItem(item.uid,1) doPlayerSay(cid,"Broke!",1) return true else if math.random(1,100) <= percent then possible_wood = {{},{}} for h = 1, #configs.wood do if configs.wood[h][2] == objeto2.itemid then possible_wood[1][#possible_wood[1]+1] = configs.wood[h][1] else if configs.wood[h][2] == 'all' then possible_wood[2][#possible_wood[2]+1] = configs.wood[h][1] end end end if possible_wood[1][1] == nil and possible_wood[2][1] == nil then doPlayerSay(cid,"This tree can not be chopped.",1) elseif possible_wood[1][1] ~= nil then doPlayerAddItem(cid,possible_wood[1][math.random(1,#possible_wood[1])],quant) elseif possible_wood[1][1] == nil and possible_wood[2][1] ~= nil then doPlayerAddItem(cid,possible_wood[2][math.random(1,#possible_wood[2])],quant) end if possible_wood[1][1] ~= nil or possible_wood[2][1] ~= nil then if skillTry >= 0 then setPlayerStorageValue(cid,STORAGE_SKILL_TRY,skillTry + 1) else setPlayerStorageValue(cid,STORAGE_SKILL_TRY,1) end doPlayerSay(cid,"I got "..quant.." woods.",1) doItemSetAttribute(objeto2.uid, "name", "remains of wood ore") doSendMagicEffect(toPosition, 3) addEvent(doTreeReturn,configs.tree_delay * 1000/60,toPosition,objeto2.itemid) doTransformItem(objeto2.uid, 8786) break end else doPlayerSendCancel(cid,"You destroyed the tree...") doSendMagicEffect(toPosition, 3) doItemSetAttribute(objeto2.uid, "name", "remains of wood ore") doPlayerSay(cid,"I broke the tree!",1) addEvent(doTreeReturn,configs.tree_delay * 1000/60,toPosition,objeto2.itemid) doTransformItem(objeto2.uid, 8785) break end end else doPlayerSendCancel(cid,"I can only chop trees") end end if skillTry >= ((skillLevel+1)*3) then if skillLevel == configs.MaxLevel then doPlayerSay(cid,"I got the max level in tree cutting.",1) setPlayerStorageValue(cid,STORAGE_SKILL_TRY,0) else setPlayerStorageValue(cid,STORAGE_SKILL_LEVEL,skillLevel + 1) setPlayerStorageValue(cid,STORAGE_SKILL_TRY,0) doPlayerSay(cid,"I advanced from level ".. skillLevel .." to level ".. skillLevel + 1 .." in chopping skill.",1) doPlayerSay(cid,"LEVEL UP!",1) end end end function doTreeReturn(itemposition,oldid) local pos = getThingfromPos(itemposition) doTransformItem(pos.uid,oldid) doSetItemText(pos.uid, getItemNameById(oldid)) doSendMagicEffect(itemposition,math.random(28,30)) end Para editar as configurações do sistema basta modificar as primeiras informações da tabela: sign = {{level = {(do skill)1,(até o skill)99}, quant(quanto você pode conseguir) = {1,2}, percent(chance de dar certo) = 25}, trees(os id's das árvores "cortáveis") = {2708, 2768, 2767, 2702, 2785, 2700, 2707, 2711, 2706, 2707, 2705, 2719, 7024, 5156, 5157, 2697, 2698, 2701, 2702, 2703, 2704, 2707, 2712, 2718, 2719, 2720, 2709, 2710, 2722, 2725, 2726, 2770, 2786, 4006, 4007, 4008, 4009, 4010, 7020, 7021, 7022, 7023}, wood = {{5901, 'all'}}, (troque o id 5901 pelo id do item que você quer dar como recompensa) tree_delay = 5, --[em minutos (tempo que as árvores vão demorar para crescer novamente depois de cortadas) MaxLevel = 150, (só modifique caso você aumentar o level máximo na tabela "sign") breakChance = 0 (a chance em % que o seu item - no meu caso o Axe - tem de quebrar quando usado na árvore) agora vá no seu arquivo actions.xml e adione a seguinte tag: <!-- Tree Cut--> <action itemid="2386" script="cutsystem.lua" /> 2386= Este é o ID do item Axe, caso queira trocar, fique à vontade. é isso aih pessoal... esse é o sisteminha que eu adaptei para meu servidor, espero que seja útil para alguém, abraços.
    1 ponto
  18. Não se esqueça de editar a storage do script pra storage do seu reset, e também a quantia de reset pra passar. Vá em data/movemments/scripts/resettile.lua, e deixe assim: function onStepIn(cid, item, position, fromPosition) local reset_storage = 123 -- coloque o storage do seu sistema de reset local quant_reset = 3 -- quantidade de resets para poder passar if (getPlayerStorageValue(cid, reset_storage) < quant_reset) then doTeleportThing(cid, fromPosition, false) doSendMagicEffect(position, CONST_ME_MAGIC_BLUE) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Somente players com ".. (quant_reset) .." ou mais podem passar.") end return TRUE end Em data/movemments/movemments.xml, adicione: <movevent type="StepIn" actionid="4563" event="script" value="resettile.lua"/> No tile que só vai poder passar com x reset, você poem a ACTION ID 4563.
    1 ponto
Líderes está configurado para São Paulo/GMT-03:00
×
×
  • Criar Novo...