Ir para conteúdo

Líderes

Conteúdo Popular

Exibindo conteúdo com a maior reputação em 10/22/11 em todas áreas

  1. Um novo modo de criar magias?

    Tiago12345 e 2 outros reagiu a Garou por uma resposta no tópico

    3 pontos
    UM NOVO MODO DE CRIAR MAGIAS? Tudo bem com vocês, grandes tibianos desse reino? Quando eu criava magias, eu sempre notei a quantidade de linhas que uma boa e trabalhada magia adquire ao se finalizar o script. Por um tempinho, estudei como funcionava toda a estrutura e pensei em como criar um único bloco de código para configurar a magia uma vez só. Os spellmakers de plantão comprovam: Se uma magia com vários efeitos e tipos de dano é criada, você precisa criar muitas variáveis locais. Então, resolvi criar uma tabela que tratava essas variáveis locais como indexes e seus atributos como conteúdo de tabelas secundárias. Nascia esse novo modo de programar magias, que parece um tanto versátil e ao mesmo tempo, reduz o tamanho de uma magia. O SCRIPT O script é bem simples, uma tabela bem básica que qualquer criança configura e se diverte e blocos de códigos que, olha que legal, você não precisa mexer. Veja abaixo o novo modelo: local spell = { { damage = COMBAT_ICEDAMAGE, effect = {CONST_ME_ICEATTACK}, formula = {0.2, 3, 0.2, 4.2, 200, 300}, area = createCombatArea({ {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 1, 2, 1, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0}}) } } local returnSpell = {} for var, config in ipairs(spell) do returnSpell[var] = createCombatObject() setCombatParam(returnSpell[var], COMBAT_PARAM_TYPE, config.damage) setCombatParam(returnSpell[var], COMBAT_PARAM_EFFECT, (type(config.effect) == "table" and config.effect[1] or config.effect)) if type(config.effect) == "table" and config.effect[2] ~= nil then setCombatParam(returnSpell[var], COMBAT_PARAM_DISTANCEEFFECT, config.effect[2]) end if config.area then setCombatArea(returnSpell[var], config.area) end function getSpellDamage(cid, level, maglevel) local min = ((level*config.formula[1] + maglevel*config.formula[2]) + config.formula[5]) local max = ((level*config.formula[3] + maglevel*config.formula[4]) + config.formula[6]) return -min, -max end setCombatCallback(returnSpell[var], CALLBACK_PARAM_LEVELMAGICVALUE, "getSpellDamage") end function onCallCombat(parameters) return doCombat(unpack(parameters)) end function onCastSpell(cid, var) if #returnSpell > 1 then for i = 1, #returnSpell do addEvent(onCallCombat, (i*280)+32, {cid, returnSpell[i], var}) end else doCombat(cid, ret[1], var) end return true end Parece que eu compliquei tudo, né? Pois bem, finja que você não vê nada aí, apenas essa tabela abaixo: local spell = { { damage = COMBAT_ICEDAMAGE, effect = {CONST_ME_ICEATTACK}, formula = {0.2, 3, 0.2, 4.2, 200, 300}, area = createCombatArea({ {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 1, 2, 1, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0}}) } } Aqui que você irá configurar sua magia, como ela vai funcionar, que área que ela irá atingir e etcétera. Vou comentar cada linha da tabela para que você entenda: local spell = { { damage = COMBAT_ICEDAMAGE, effect = {CONST_ME_ICEATTACK}, formula = {0.2, 3, 0.2, 4.2, 200, 300}, area = createCombatArea({ {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 1, 2, 1, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0}}) } } Sobre a fórmula, você não precisa mais ter dor de cabeça como você vai diminuir o dano da sua magia e etcétera. Veja o quê cada número significa abaixo: formula = {MIN_LEVEL, MIN_MAGLEVEL, MAX_LEVEL, MAX_MAGLEVEL, MIN_OFFSET, MAX_OFFSET} min = (level*MIN_LEVEL + maglevel * MIN_MAGLEVEL) + MIN_OFFSET max = (level*MAX_LEVEL + maglevel * MAX_MAGLEVEL) + MAX_OFFSET E sobre a área, você pode usar áreas pré-configuras naquele arquivo spells.lua dentro de spells/lib, assim você diminuirá ainda mais o código. area = createCombatArea(AREA_BEAM4) Se a magia for do tipo "strike", você pode configurar o efeito de distância assim: effect = {CONST_ME_ICEATTACK, CONST_ANI_ICE} Para criar uma magia com múltiplos danos, basta duplicar, triplicar, conforme sua necessidade a sub-tabela dentro da tabela principal - atenção - não esqueça de separar as várias subtabelas com uma vírgula, por exemplo: local spell = { { damage = COMBAT_ICEDAMAGE, -- O tipo de dano effect = {CONST_ME_ICEATTACK}, -- Os efeitos da magia formula = {0.2, 3, 0.2, 4.2, 200, 300}, -- A formula de dano da magia area = createCombatArea({ -- Area da magia {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 1, 2, 1, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0}}) }, -- virgula { damage = COMBAT_ICEDAMAGE, -- O tipo de dano effect = {CONST_ME_ICEATTACK}, -- Os efeitos da magia formula = {0.2, 3, 0.2, 4.2, 200, 300}, -- A formula de dano da magia area = createCombatArea({ -- Area da magia {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 1, 2, 1, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0}}) } } [/code] [size=3][font=tahoma,geneva,sans-serif]Essa é uma magia com dois hits de gelo, se você entendeu todo o tópico [/font][/size] [size=3][font=tahoma,geneva,sans-serif][hr][/font][/size] [size=4][b][font=tahoma,geneva,sans-serif]CONCLUSÃO[/font][/b][/size] [size=3][font=tahoma,geneva,sans-serif][hr][/font][/size] [size=3][font=tahoma,geneva,sans-serif]Eu reconheço que esse novo modelo parece um pouco inútil e estranho, mas ele foi criado com intuíto de otimizar magias com múltiplos efeitos e tipos de dano.[/font][/size] [size=3][font=tahoma,geneva,sans-serif]Até o próximo tópico, abraços.[/font][/size] [size=3][font=tahoma,geneva,sans-serif][hr][/font][/size]
  2. Aula I - Introdução a Programação LUA

    Mihawk Eye e 2 outros reagiu a Garou por uma resposta no tópico

    3 pontos
    INTRODUÇÃO A PROGRAMAÇÃO Lua Olá, se você está aqui lendo essa aula, provavelmente é porque abriu aqueles arquivos estranhos da pasta do seu servidor e viu uns escritos místicos que você não conseguiu entender. Primeiro, você tentou mexer naqueles escritos e - BOOM! - as quests do seu servidor começaram a dar erros, as poções do jogo começaram a ficar desequilibradas, magias começaram a ficar "apelonas" e, enfim, seu servidor foi para o espaço. Aqui nesse conjunto de aulas, você aprenderá a milenar arte de programar scripts e sua única ferramenta será a linguagem LUA. No fim delas, você poderá bater no peito e falar, eu sou um scripter. SCRIPTING? SCRIPTS? Antes de mais nada, você precisa entender o que é scripting e o que são scripts. Scripting é, nada mais, o ato de programar em uma certa linguagem. Já scripts são blocos de código escritos nessa linguagem, que, através de um interpretador, são lidos e... bem... interpretados. Essa certa linguagem é a Lua, uma potente ferramenta de programação, que oferece recursos e suporte para orientação a objetos ou dados, como também programação funcional. Por ser de fácil utilização e entendimento, a linguagem LUA foi implementada como uma biblioteca ao código C++ do projeto Open Tibia. O QUE EU PRECISO PARA SER SCRIPTER? Muita gente acha dá de cara com os obstáculos e, pronto, desiste. Isso é um dos "defeitos" que você deve abrir mão, se quiser ser um futuro programador. Você deve ter força de vontade e determinação, olhar para a linguagem e falar: "Eu sou foda e vou fazer isso funcionar". Além disso, você precisa ter paciência, nem sempre você vai conseguir entender os mais difíceis conceitos e estruturas, quando isso ocorre, você deve ter garra e tirar suas dúvidas. Nem sempre você vai pegar um bloco vazio, escrevinhar um código e ele vai funcionar do jeito que você queria e, por isso, você não pode desanimar e/ou desistir. Um scripter também precisa ter criatividade e muita vontade, a primeira para ter ideias e a segunda para concluir e tornar essa ideia real. Você acha que vai ter a ideia, olhar para a tela do computador e sem cansar a mão de tanto escrever, a ideia vai surgir pronta? Não mesmo. E, por fim, você precisa de ferramentas, não é? Afinal, o que é um técnico sem suas ferramentas de trabalho. Lua necessita de um interpretador que leia seus scripts e, entendendo, execute as funções programadas nele, para isso você já tem um interpretador e ele é seu próprio servidor. Como disse antes, o código do projeto Open Tibia, tem bibliotecas Lua, o que faz do executável um interpretador. E você irá precisar de uma ferramenta para escrever o código, para isso, recomendo o Notepad++, que possui suporte a Lua. CONCLUSÃO Essa aula termina aqui, ela é curta, pois introduz apenas os conceitos básicos, afinal, você não quer ler um pequeno artigo e se tornar o melhor, melhor do mundo em programar scripts, certo? Na próxima aula, juntos iremos aprender que a programação tem uma certa lógica entre-linhas, criaremos um algoritmo e com a apresentação detalhada de algumas estruturas léxicas, iremos criar nosso primeiro script! Bem-vindo ao mundo do scripting, padawan!
  3. [TalkAction] Teleport

    1215171 e 2 outros reagiu a Kimoszin por uma resposta no tópico

    3 pontos
    Um simples script que eu fiz, só para brincar mesmo Mais que pode ter um bom uso para iniciantes em script lua. teleport1.lua teleportroom = {x= 124, y= 404, z= 7} trainerroom = {x= 128, y= 401, z= 7} templeroom = {x= 129, y= 403, z= 7} function onSay(cid, words, param) if getTilePzInfo(getPlayerPosition(cid)) then if(param == 'room') then doTeleportThing(cid, teleportroom) doSendMagicEffect(getPlayerPosition(cid), 10) elseif (param == 'trainer') then doTeleportThing(cid, trainerroom) doSendMagicEffect(getPlayerPosition(cid), 10) elseif (param == 'temple') then doTeleportThing(cid, templeroom) doSendMagicEffect(getPlayerPosition(cid), 10) else doPlayerSendTextMessage(cid, 22, "Voc&#234; precisa de algum parametro") doSendMagicEffect(getPlayerPosition(cid), 2) end else doPlayerSendTextMessage(cid, 22, "Voc&#234; s&#243; pode se teleportar quando estiver em area PZ.") doSendMagicEffect(getPlayerPosition(cid), 2) end end talkactions.xml <talkaction log="yes" words="!teleport" event="script" value="teleport1.lua"/>
  4. [Action] Recarregar Soft e Firewalker boots

    RAJADAO e um outro reagiu a Kimoszin por uma resposta no tópico

    2 pontos
    Bom esse é outro simples script, vai renovar sua soft boots e firewalker boots quando vc clicar nelas. recarregar.lua boots = { [10021] = {money = 20000, new = 2640}, [10022] = {money = 40000, new = 9932} } function onUse(cid,item) if not boots[item.itemid] then return false elseif not doPlayerRemoveMoney(cid, boots[item.itemid].money) then return doPlayerSendCancel(cid, "Voc&#234; precisa ter "..boots[item.itemid].money.." gps para regarregar sua bota.") end doRemoveItem(item.uid, 1) doPlayerAddItem(cid, boots[item.itemid].new, 1) doSendMagicEffect(getCreaturePosition(cid), 12) doPlayerSendTextMessage(cid, 22, "Voc&#234; renovou sua "..getItemNameById(boots[item.itemid].new)..".") end Actions.xml <action itemid="10021;10022" event="script" value="recarregar.lua"/>
  5. Cadastros do TibiaKing superam 100 num dia

    Galactia e um outro reagiu a Renato por uma resposta no tópico

    2 pontos
    É isso mesmo galera, Estou feliz que nosso trabalho está dando resultados. Demorou um ano pra pegar no tranco mas digo de peito estufado sem medo de estar enganado pra todos vocês: estamos crescendo de verdade! Estamos criando ideias todos os dias pra atrair novos membros que estão realmente funcionando, e hoje já chegamos aos 104 cadastros (94 confirmados por e-mail), e agora ainda são 20:00 então isso só tende à crescer. Acho legal o trabalho que nossa equipe tem fazendo, principalmente nossa equipe de aprendizes, que vem trazendo conteúdo e ideias invejáveis. Parabéns à todos eles, à nós, e à vocês que ajudam todos os dias nós a crescer. Muito obrigado, Renato Ribeiro e Equipe TibiaKing.
  6. [TUTORIAL] Fazendo seu Potion Refiller

    Jose Anderson reagiu a toty1234 por uma resposta no tópico

    1 ponto
    Bom galera, eu não vi ainda nenhum tutorial explicando isso aqui no forum, então resolvi fazer o meu ... Está bem simples mas axo qe está bom para entender Simples, faça seu waypoint, com no inicio uma label escrito start, E no final faça um Macro com o seguinte: 500 {Refill} Misc.ItemCountEx(266)>10 CaveBot.GoLabel(start)) Onde 10 é o tanto de pot para ele sair da cave e ir refillar, é 266 o ID da potion. ID | Name da Potion 7876 | Small Health Potion 266 | Health Potion 268 | Mana Potion 236 | Strong Health Potion 237 | Strong Mana Potion 239 | Great Health Potion 238 | Great Mana Potion 7642 | Great Spirit Potion 7643 | Ultimate Health Potion Agora ande até o bank, com o learn ativado, xegando la ADD um Hi, deposit all, yes, e crie um novo macro, com o seguinte: 1000 {Withdraw} VarSetEx(Total, NUMBEROFPOTS) VarSet(Potnow) Misc.ItemCountEx(IDITEMHERE) VarSub(Total, !Potnow!) VarMult(Total, PRICEEACHITEM) HUD.Display(!Total!) Self.Say(hi) Macro.Wait(2000) NPC.Say(withdraw) Macro.Wait(2000) NPC.Say(!Total!) Macro.Wait(2000) NPC.Say(yes)) Onde 'NUMBEROFPOTS' é o numero de potions qe voc quer qe ele fique no final; 'IDITEMHERE' é o ID da potion; 'PRICEEACHITEM' é o preço de cada potion. Agora, faça o caminho até a loja de potions, add um Hi/Trade, e coloque o seguinte macro la: 1000 {Pot Reffil} VarSetEx(Total, NUMBEROFPOTS) VarSet(Potnow) Misc.ItemCountEx(IDITEMHERE) VarSub(Total, !Potnow!) HUD.Display(!Total!) Self.Say(hi) Macro.Wait(2000) NPC.Say(trade) NPC.Buy(266, !Total!, 1) Macro.Wait(2000) NPC.Say(bye)) Onde 'NUMBEROFPOTS' é o numero de potions qe voc quer qe ele fique no final; 'IDITEMHERE' é o ID da potion. Agora faça o caminho de volta para a cave, salve seu waypoint e seja feliz. GOSTOU DO TUTORIAL ? Então de um REP+ ake em baixo NÃO GOSTOU DO TUTORIAL ? Então de um REP+ ake em baixo
  7. 1 ponto
    Listão de Actions, TalkActions & MoveEvents Nome do Tópico: Character Info Autor: Doughell Link do Tópico: http://tibiaking.com...character-info/ Comentário: Nome do Tópico: Dungeon Finder Autor: Guilherme Link do Tópico: http://tibiaking.com...dungeon-finder/ Comentário: Nome do Tópico: Gate System Autor: Doughell Link do Tópico: http://tibiaking.com...60-gate-system/ Comentário: Nome do Tópico: Portal WoE Autor: Doughell Link do Tópico: http://tibiaking.com...353-portal-woe/ Comentário: Nome do Tópico: Sistema de Forja Autor: Lpz Link do Tópico: http://tibiaking.com...stema-de-forja/ Comentário: Nome do Tópico: [Action] Removedor de Frags Autor: Matheus Link do Tópico: http://tibiaking.com...vedor-de-frags/ Comentário: Nome do Tópico: [Action] Stamina Doll Autor: AgaSsI Link do Tópico: http://tibiaking.com...s-stamina-doll/ Comentário: Nome do Tópico: [Actions] Potions Baseadas no Level Autor: AgaSsI Link do Tópico: http://tibiaking.com...eadas-no-level/ Comentário: Nome do Tópico: Gesior ACC - Postando Ticker in Game Autor: Renato Link do Tópico: http://tibiaking.com...ticker-in-game/ Comentário: Nome do Tópico: Remover Pedra com Alavanca Autor: Kimoszin Link do Tópico: Comentário: Nome do Tópico: [Action] Addons Em Quest Autor: AgaSsI Link do Tópico: http://tibiaking.com...dons-em-quests/ Comentário: Nome do Tópico: Proibir Palavrões Autor: Matheus Link do Tópico: http://tibiaking.com...ibir-palavroes/ Comentário: Nome do Tópico: Resete Sistem Autor: macnowfhael Link do Tópico: http://tibiaking.com...-resete-sistem/ Comentário: Nome do Tópico: GOD que da BLESS Autor: Matheus Link do Tópico: http://tibiaking.com/forum/topic/9349-talkaction-bless-para-god/ Comentário: Nome do Tópico: [Action] Scroll de Level Autor: Augusto Link do Tópico: http://tibiaking.com...croll-de-level/ Comentário: Nome do Tópico: [Action] Sistema de Mineração Autor: Matheus Link do Tópico: http://tibiaking.com...a-de-mineracao/ Comentário: Nome do Tópico: [TalkAction] Buy Aol Autor: Kimoszin Link do Tópico: http://tibiaking.com...action-buy-aol/ Comentário: Nome do Tópico: [TalkAction] Addon Doll Autor: Kimoszin Link do Tópico: http://tibiaking.com...ion-addon-doll/ Comentário: OBSERVAçãO: Como há muitos tópicos apenas os das primeiras páginas serão adicionados, os que não forem atualizados ou os autores de seus tópicos abandonar o tópico, será excluido dando chance a outro tópico. Alguns tópicos que são repetitivos não foram adicionados. A ultima atualização ocorreu: 31/12/2011 ás 15:40 Você não está com seu tópico em nossa lista? Comentem em nosso tópico que atualizaremos no ato!
  8. Editores de Mapas

    Deyvidson reagiu a Mophus por uma resposta no tópico

    1 ponto
    Não, ainda não foi disponibilizado pelo remeresmapeditor. Em breve, sai.
  9. Entrar no ot editado

    Deyvidson reagiu a Garou por uma resposta no tópico

    1 ponto
    Não é possível, claro. Você baixou um servidor para a versão 8.5x do Tibia, não dá para jogar ele com o seu Tibia que está instalado. Você precisa baixar um servidor de acordo com a versão do seu Tibia ou então baixar um Tibia que se adeque. Para acesso a todas versões do Tibia: http://tibiaclient.com/ Abraço
  10. OTServer pelo hamachi

    Deyvidson reagiu a Kimoszin por uma resposta no tópico

    1 ponto
    Você precisa criar uma rede para seus amigos se conectarem, e depois eles se conectam pelo o seu IP do hamachi
  11. OTServer pelo hamachi

    Deyvidson reagiu a Garou por uma resposta no tópico

    1 ponto
    Tem sim. Mas, preste atenção, ip = "127.0.0.1" Você irá colocar, no campo acima, o ip do seu hamachi e todos que estiverem conectados na sua rede poderão entrar no seu servidor. Se você gostar, dê uma olhada em alguns tutoriais dessa área: Internet Compartilhada. Pois se seu modem é roteado, você poderá desbloquear as portas de conexão e jogo do servidor e não necessitará de Hamachi.
  12. #2 Desmembrando seu Script

    Augusto reagiu a Doughell por uma resposta no tópico

    1 ponto
    Olá a todos frequentadores da seção Scripting! Hoje partiremos para nossa segunda aula de Scripting, as duas aulas foram bem rápidas essa aqui já será um pouco mais complexa, mas espero que usufruam bem dela! local config = { doorPosition = {x = 100, y = 100, z = 7}, doorID = 1000, minAccess = 6, message = { doorOpen = "The door has been opened!" doorClose = "The door has been closed!" } } function onSay(cid, words, param) if getPlayerAccess(cid) >= config.minAccess then local item = getTileItemById(config.doorPosition, config.doorID) if item.uid > 0 then doRemoveItem(item.uid, 1) doPlayerSnedTextMessage(cid, 22, config.message.doorOpen) else doCreateItem(config.doorID, 1, config.doorPosition) doPlayerSendTextMessage(cid, 22, config.message.doorClose) end end return true end Agora vamos as explicações: local config = { Esse o inicio de uma tabela, para fácilitar a organização (isso e uma das vantagens). doorPosition = {x = 100, y = 100, z = 7}, A posição aonde o item/door será removido e adicionado. doorID = 1000, O ID da door, selecione corretamente! minAccess = 6, O acesso que precisa ter no minimo para executar o comando, message = { Entre essa tabela, terá as mensagens de abertura e fechamento. doorOpen = "The door has been opened!" Mensagem que aparecerá ao abrir o portão. doorClose = "The door has been closed!" Mensagem que aparecerá ao fechar o portão. } } Fecha as tabelas. function onSay(cid, words, param) Para executar o comando é por meio de falas, palavras (exemplo: !gate) if getPlayerAccess(cid) >= config.minAccess then A if onde checa o acesso minimo para executar o comando. local item = getTileItemById(config.doorPosition, config.doorID) Checa o tile (piso) para as configurações da posição da porta e do ID. doRemoveItem(item.uid, 1) Remove o ID da door selecionado e a quantidade 1. doPlayerSnedTextMessage(cid, 22, config.message.doorOpen) else Para mandar a mensagem ao abrir a porta, o número 22 e a cor da mensagem. Observação: A função "else" fará o contrário do de baixo, por exemplo No de baixo deu certo, no de cima com o else dará certo. doCreateItem(config.doorID, 1, config.doorPosition) Criará a door (com a id selecionada) na quantidade 1 com as configurações da posição. doPlayerSendTextMessage(cid, 22, config.message.doorClose) Mandará uma mensagem que a porta foi fechada. end end return true end O final do script, para fechar as ifs o script e checar a função no return, no caso true.
  13. [TalkAction] Auto Numbers

    Renato reagiu a Doughell por uma resposta no tópico

    1 ponto
    Olá a todos! Este script Auto Number será bem útil a servidores com o evento Lottery System, pelo seguinte motivo: Ele sorteará x números (a quantidade é definida por você) para que você possa usar no evento, Lottery. Não possui um tempo de uso de um script para o outro e pode usar quantas vezes quiser, é apenas uma sujestão que o script da ao jogador para que possa usar no evento. Auto Numbers Crie um arquivo em otserv/talkactions/scripts com nome de acn.lua e adicione: Após isso adicione em talkactions.xml o seguinte: É isso ai galera, qualquer dúvida comentem ou dêem sujestões!
  14. Arthur, a diferença é que o Matheus arruma... UHDAUSDHAUDHSAU Muito bom mat, rep+
  15. Nenhuma imagem abriu Matheus. Parece que precisa de conta no ImageShack pra ver. Vai rola isso muito agora. Todo mundo postando tutoriais com problemas nas imagens.
  16. Votação Mophus x Ferlations

    Augusto reagiu a Chaos por uma resposta no tópico

    -1 pontos
    Editado por ferlations, Ontem, 18:21. Lol mano acha que pode edita td q ve?¬¬ idiotice é o krl n chinguei nem nada dei minha opinião fd...
Líderes está configurado para São Paulo/GMT-03:00

Informação Importante

Confirmação de Termo