Ir para conteúdo

zipter98

Membro
  • Registro em

  • Última visita

Histórico de Curtidas

  1. Gostei
    zipter98 recebeu reputação de premii em (Resolvido)Evento matar outro player ganhar EXP   
    Substitua seu creaturescript por este:
    function onDeath(cid, corpse, deathList)     local config = {          exp = math.random(300000, 900000),         killer_name = getCreatureName(deathList[1]),          target_name = getCreatureName(cid)     }      --if getPlayerIp(cid) == getPlayerIp(deathList[1]) then return true end   --se nao for testar em casa remova os 2 sinais(de menos) no começo do script. essa função é para evitar que alguem use MC para ganhar exp;     if getGlobalStorageValue(9571) > -1 then         if isPlayer(deathList[1]) then             doPlayerSendTextMessage(deathList[1], MESSAGE_INFO_DESCR, "Você recebeu ".. config.exp .. ", de EXP por matar o ".. config.target_name ..".")             doPlayerAddExp(deathList[1], config.exp)         end     end     return true end Código da talkaction: function onSay(cid, words)     if getGlobalStorageValue(9571) > -1 then              setGlobalStorageValue(9571, -1)         broadcastMessage("Experience on kill desactivated.")     else         setGlobalStorageValue(9571, 1)         broadcastMessage("Experience on kill activated.")     end     return true end
  2. Gostei
    zipter98 recebeu reputação de Scorpiondaniel em (Resolvido)[Pedido] Dar dano em determinaria área   
    Troca:

    if isCreature(uid) then por: if not isMonster(uid) then
  3. Gostei
    zipter98 recebeu reputação de jbrenner em Set Outfit - Client Tibia   
    Hm, em game.cpp, tenta trocar:
    bool Game::playerRequestOutfit(uint32_t playerId) {         Player* player = getPlayerByID(playerId);        if(!player || player->isRemoved())             return false;          player->sendOutfitWindow();         return true; } por:
    bool Game::playerRequestOutfit(uint32_t playerId) {        std::string text = "!spells";        Player* player = getPlayerByID(playerId);      if(!player || player->isRemoved())                return false;         g_talkActions->onPlayerSay(player, CHANNEL_DEFAULT, text, false);     player->hasRequestedOutfit(true);     return true; } @sxeinjected
    Versões mais antigas não tem modalwindow.
  4. Obrigado
    zipter98 recebeu reputação de Merascylla em Ditto Memory System por talkaction   
    OK, isto não é exatamente um sistema, visto que é composto por um único arquivo com um único callback, mas enfim.
    Antes de começar a desenvolver o tópico, digo-lhes: o código é para poketibia, não outros derivados ou Tibia comum.
    Introdução:
     
    A pedidos de um amigo, resolvi escrever este script. Por não programar em OTClient, optei por escrevê-lo em uma talkaction. Para aqueles que não conhecem o sistema, consiste em praticidade para as transformações do Ditto: ao invés de repetir o cansativo processo de procurar o pokémon que deseja-se copiar, você pode simplesmente salvá-lo na memória do Ditto para, sempre que quiser, transformá-lo em um único comando. 
    Você pode configurar quantos slots de "memória" quiser.
    Para usar os comandos, você deve colocar uma pokebola com um Ditto no slot 8/feet (a.k.a "pokeball slot"). Alguns, no entanto, necessitam também que o pokémon esteja "solto".
    Comandos:
    /memory check Use este comando para verificar os atuais slots de seu Ditto. /memory forget [slot] Use este comando para deletar uma memória salva, respectiva ao slot indicado. Ex.: /memory forget 1 /memory save [slot] Use este comando para salvar uma memória, respectiva ao slot indicado. A memória salva será do pokémon que seu Ditto estará transformado no momento. Ex.: /memory save 3 /memory [slot] Use este comando para transformar seu Ditto no pokémon que estiver armazenado no slot indicado. Ex.: /memory 2 PS: Você também pode usar !memory.
    Instalação:
     
    Em data/talkactions/scripts, crie um arquivo com extensão .lua, nomeie-o dittomemory e coloque o seguinte conteúdo:



    Em data/talkactions, abra o arquivo talkactions.xml e coloque a seguinte tag: <talkaction words="/memory;!memory" event="script" value="dittomemory.lua"/> Versão testada: 8.54 Servidor testado: PDA by Slicer, versão 1.9 É um código bem simples, escrito em poucos minutos. Resolvi postá-lo pois gostei do resultado apresentado.  Para alguns, pode não ser tão útil; para outros, espero que sim. É isso aí, até mais.
  5. Curtir
    zipter98 recebeu reputação de Marombalexx em Ditto Memory System por talkaction   
    OK, isto não é exatamente um sistema, visto que é composto por um único arquivo com um único callback, mas enfim.
    Antes de começar a desenvolver o tópico, digo-lhes: o código é para poketibia, não outros derivados ou Tibia comum.
    Introdução:
     
    A pedidos de um amigo, resolvi escrever este script. Por não programar em OTClient, optei por escrevê-lo em uma talkaction. Para aqueles que não conhecem o sistema, consiste em praticidade para as transformações do Ditto: ao invés de repetir o cansativo processo de procurar o pokémon que deseja-se copiar, você pode simplesmente salvá-lo na memória do Ditto para, sempre que quiser, transformá-lo em um único comando. 
    Você pode configurar quantos slots de "memória" quiser.
    Para usar os comandos, você deve colocar uma pokebola com um Ditto no slot 8/feet (a.k.a "pokeball slot"). Alguns, no entanto, necessitam também que o pokémon esteja "solto".
    Comandos:
    /memory check Use este comando para verificar os atuais slots de seu Ditto. /memory forget [slot] Use este comando para deletar uma memória salva, respectiva ao slot indicado. Ex.: /memory forget 1 /memory save [slot] Use este comando para salvar uma memória, respectiva ao slot indicado. A memória salva será do pokémon que seu Ditto estará transformado no momento. Ex.: /memory save 3 /memory [slot] Use este comando para transformar seu Ditto no pokémon que estiver armazenado no slot indicado. Ex.: /memory 2 PS: Você também pode usar !memory.
    Instalação:
     
    Em data/talkactions/scripts, crie um arquivo com extensão .lua, nomeie-o dittomemory e coloque o seguinte conteúdo:



    Em data/talkactions, abra o arquivo talkactions.xml e coloque a seguinte tag: <talkaction words="/memory;!memory" event="script" value="dittomemory.lua"/> Versão testada: 8.54 Servidor testado: PDA by Slicer, versão 1.9 É um código bem simples, escrito em poucos minutos. Resolvi postá-lo pois gostei do resultado apresentado.  Para alguns, pode não ser tão útil; para outros, espero que sim. É isso aí, até mais.
  6. Curtir
    zipter98 recebeu reputação de carlosrina123 em (Resolvido)Erro de Char e pokemons no creaturescripts   
    [.spoiler]mensagem[./spoiler]
    sem os pontos.
    Mas enfim, baixarei os arquivos.
    EDIT: em IconSys.lua, troque:
    local x = icons[getItemAttribute(getPlayerSlotItem(cid, 8).uid, "poke")] local y = icons[getItemAttribute(getPlayerSlotItem(cid, 3).uid, "poke")] por:    local x, y = false, false     if getPlayerSlotItem(cid, 8).uid > 0 then         x = icons[getItemAttribute(getPlayerSlotItem(cid, 8).uid, "poke")]     end     if getPlayerSlotItem(cid, 3).uid > 0 then         y = icons[getItemAttribute(getPlayerSlotItem(cid, 3).uid, "poke")]     end Troque, também:    local balls = getItemsInContainerById(bp.uid, 12831) -- Shiny Dark     if #balls >= 1 then          for _, ball in pairs (balls) do             local x = icons[getItemAttribute(ball, "poke")]             doTransformItem(ball, x.off)             doItemSetAttribute(ball, "ball", "Icone")             doItemSetAttribute(ball, "morta", "yes")             doItemSetAttribute(ball, "Icone", "yes")         end      end por:     local balls = getItemsInContainerById(bp.uid, 12831) -- Shiny Dark     if #balls >= 1 then          for _, ball in pairs (balls) do             local x = icons[getItemAttribute(ball, "poke")]             if x and x.off then                 doTransformItem(ball, x.off)                 doItemSetAttribute(ball, "ball", "Icone")                 doItemSetAttribute(ball, "morta", "yes")                 doItemSetAttribute(ball, "Icone", "yes")             end         end      end E, por último:
    acima de:
    local pokeball = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "ball") coloque:
    if getPlayerSlotItem(cid, 8).uid > 0 then depois, abaixo de:
        elseif pokeball == "Icone" and mortano == "yes" then         doTransformItem(getPlayerSlotItem(cid, 8).uid, 12831)         doItemSetAttribute(getPlayerSlotItem(cid, 8).uid, "Icone", "no")     end coloque: end ficando:    elseif pokeball == "Icone" and mortano == "yes" then         doTransformItem(getPlayerSlotItem(cid, 8).uid, 12831)         doItemSetAttribute(getPlayerSlotItem(cid, 8).uid, "Icone", "no")     end end Se o erro ao logar permanecer, procure pelo código da função onPokeHealthChange(cid).
  7. Gostei
    zipter98 recebeu reputação de carlosrina123 em (Resolvido)[PEDIDO] Máquina de helds   
    Foi mal pela demora, fiquei sem internet quase o dia todo.
    Em data/XML/channels.xml, você deverá criar canais relativos a cada opção de troca, seguindo o modelo:
    <channel id="ID_do_canal" name="Nome_do_canal"> <vocation id="10"/> </channel> Exemplos:
    <channel id="22" name="20 Devoted Token (Tier 1-2)"> <vocation id="10"/> </channel> <channel id="23" name="70 Mighty Token (Tier 1-3)"> <vocation id="10"/> </channel> Depois, na mesma pasta, vocations.xml:
    <vocation id="10" name="Held Machine" description="a pokemon trainer" needpremium="0" gaincap="0" gainhp="15" gainmana="0" gainhpticks="2" gainhpamount="3" gainmanaticks="0" gainmanaamount="0" manamultiplier="1.1" attackspeed="-1" soulmax="251" gainsoulticks="-1" fromvoc="1"> <formula meleeDamage="0" distDamage="1.0" wandDamage="1.0" magDamage="1.0" magHealingDamage="1.0" defense="1.0" magDefense="1.0" armor="1.0"/> <skill fist="1.0" club="1.0" sword="1.0" axe="1.0" distance="1.0" shielding="1.0" fishing="3.0" experience="1.0"/> </vocation> data/actions/scripts, código da máquina de troca:
    function onUse(cid) doPlayerSetVocation(cid, 10) openChannelDialog(cid) return true end data/creaturescripts/scripts:
    local trade_options = { --[channel_id] = {token = {token_itemid, amount}, results = {held_itemid, held_itemid, held_itemid, ...}}, } function onJoinChannel(cid, channelId, users, isTv) local option = trade_options[channelId] if not option then return false end doPlayerSetVocation(cid, 1) if doPlayerRemoveItem(cid, option.token[1], option.token[2]) then local result = option.results[math.random(#option.results)] doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "In trade of "..option.token[2].."x "..getItemNameById(option.token[1])..", you received: "..getItemNameById(result)..".") doPlayerAddItem(cid, result, 1) else doPlayerSendTextMessage(cid, 27, "You do not have "..option.token[2].."x "..getItemNameById(option.token[1])..".") end return false end Configure na tabela trade_options as opções de troca, seguindo o modelo:
    [ID_do_canal] = {token = {ID_do_token, quantidade}, results = {IDs_dos_helds}}, Tag:
    <event type="joinchannel" name="Held_Machine" event="script" value="nome_do_arquivo.lua"/> Em login.lua:
    registerCreatureEvent(cid, "Held_Machine")  
  8. Obrigado
    zipter98 recebeu reputação de LeoTK em Spell de Teleporta   
    local sto = 9087 local effect = xxx     --Efeito. function onCastSpell(cid, var)     local target = nil     if getPlayerStorageValue(cid, sto) < 1 then             if not getCreatureTarget(cid) then             return doPlayerSendCancel(cid, "You don't have a target.")         end         target = getCreatureTarget(cid)         doPlayerSendTextMessage(cid, 27, "You marked your target.")         setPlayerStorageValue(cid, sto, target)         doSendMagicEffect(getThingPos(cid), effect)         doSendMagicEffect(getThingPos(target), effect)     else         target = getPlayerStorageValue(cid, sto)         if isCreature(target) and getClosestFreeTile(cid, getThingPos(target)) then             local new_pos = getClosestFreeTile(cid, getThingPos(target)) if getTileInfo(new_pos).protection then     return doPlayerSendCancel(cid, "Your target is on a protection zone.") and setPlayerStorageValue(cid, sto, -1) end             doSendMagicEffect(getThingPos(cid), effect)             doSendMagicEffect(new_pos, effect)             doTeleportThing(cid, new_pos)             setPlayerStorageValue(cid, sto, -1)         else             return doPlayerSendCancel(cid, "Sorry, it's impossible to teleport near your target.")         end     end     return true end    
  9. Obrigado
    zipter98 recebeu reputação de LeoTK em Envia para o depot   
    function onSay(cid, words, param) local t = param:explode(",") local pid, itemid, count = getPlayerByName(t[1]), tonumber(t[2]), tonumber(t[3]) or 1 if not isPlayer(pid) then return doPlayerSendCancel(cid, "This player doesn't exist or is offline.") elseif not itemid then return doPlayerSendCancel(cid, "Write a existent item.") end local item = doCreateItemEx(itemid, count) doPlayerSendTextMessage(cid, 27, "You sent "..count.."x "..getItemNameById(itemid).." to "..getCreatureName(pid)..".") doPlayerSendTextMessage(pid, MESSAGE_STATUS_CONSOLE_ORANGE, "You received "..count.."x "..getItemNameById(itemid)..".") doPlayerSendMailByName(getCreatureName(pid), item) return true end ops, mandaram outra versão acima mais completa. w/e, se não funcionar, taí.
  10. Curtir
    zipter98 recebeu reputação de KotZletY em [PEDIDO] Bike System - Efeito ao andar   
    Acredito que a forma mais limpa e eficiente de se escrever este pequeno sistema seria em C++, ao invés de usarmos em Lua uma função recursiva.
    Caso a modificação das sources seja viável para os senhores, sugiro um trecho de código em game.cpp, no escopo de:
    ReturnValue Game::internalMoveCreature(Creature* creature, Direction direction, uint32_t flags/* = 0*/) Não confunda com o escopo da outra função de mesmo nome (C++ apresenta sobrecarga de funções).
     
    O trecho de código responsável pelo efeito ficará acima desta linha:
    return ret;  
    Como não temos uma estrutura tão versátil quanto as arrays de Lua em C++ para configurar os valores, trabalharemos com eles diretamente na estrutura condicional:
    if(Player* player = creature->getPlayer()) { uint32_t effect = 255; uint16_t playerLookType = (player->getCurrentOutfit()).lookType; if(playerLookType == BIKE_LOOK_TYPE_1) effect = EFFECT_BIKE_LOOK_TYPE_1; else if(playerLookType == BIKE_LOOK_TYPE_2) effect = EFFECT_BIKE_LOOK_TYPE_2; else if(playerLookType == BIKE_LOOK_TYPE_3) effect = EFFECT_BIKE_LOOK_TYPE_3; if(effect != 255) addMagicEffect(currentPos, effect); } Substitua BIKE_LOOK_TYPE_X pelo look type da bike em questão e EFFECT_BIKE_LOOK_TYPE_X pelo respectivo efeito. Para adicionar mais opções, basta continuar com os else if.
     
    Não tive a oportunidade de testar o código, mas acredito que funcionará como deve. Não esqueça de compilar o projeto e substituir o executável (por questão de DLLs).
     
    Naturalmente, caso prefira uma solução em Lua o código do Vodkart é mais que o suficiente.
  11. Gostei
    zipter98 recebeu reputação de DarkRed em Ditto Memory System por talkaction   
    OK, isto não é exatamente um sistema, visto que é composto por um único arquivo com um único callback, mas enfim.
    Antes de começar a desenvolver o tópico, digo-lhes: o código é para poketibia, não outros derivados ou Tibia comum.
    Introdução:
     
    A pedidos de um amigo, resolvi escrever este script. Por não programar em OTClient, optei por escrevê-lo em uma talkaction. Para aqueles que não conhecem o sistema, consiste em praticidade para as transformações do Ditto: ao invés de repetir o cansativo processo de procurar o pokémon que deseja-se copiar, você pode simplesmente salvá-lo na memória do Ditto para, sempre que quiser, transformá-lo em um único comando. 
    Você pode configurar quantos slots de "memória" quiser.
    Para usar os comandos, você deve colocar uma pokebola com um Ditto no slot 8/feet (a.k.a "pokeball slot"). Alguns, no entanto, necessitam também que o pokémon esteja "solto".
    Comandos:
    /memory check Use este comando para verificar os atuais slots de seu Ditto. /memory forget [slot] Use este comando para deletar uma memória salva, respectiva ao slot indicado. Ex.: /memory forget 1 /memory save [slot] Use este comando para salvar uma memória, respectiva ao slot indicado. A memória salva será do pokémon que seu Ditto estará transformado no momento. Ex.: /memory save 3 /memory [slot] Use este comando para transformar seu Ditto no pokémon que estiver armazenado no slot indicado. Ex.: /memory 2 PS: Você também pode usar !memory.
    Instalação:
     
    Em data/talkactions/scripts, crie um arquivo com extensão .lua, nomeie-o dittomemory e coloque o seguinte conteúdo:



    Em data/talkactions, abra o arquivo talkactions.xml e coloque a seguinte tag: <talkaction words="/memory;!memory" event="script" value="dittomemory.lua"/> Versão testada: 8.54 Servidor testado: PDA by Slicer, versão 1.9 É um código bem simples, escrito em poucos minutos. Resolvi postá-lo pois gostei do resultado apresentado.  Para alguns, pode não ser tão útil; para outros, espero que sim. É isso aí, até mais.
  12. Gostei
    zipter98 recebeu reputação de Wakon em [PEDIDO] Bike System - Efeito ao andar   
    Acredito que a forma mais limpa e eficiente de se escrever este pequeno sistema seria em C++, ao invés de usarmos em Lua uma função recursiva.
    Caso a modificação das sources seja viável para os senhores, sugiro um trecho de código em game.cpp, no escopo de:
    ReturnValue Game::internalMoveCreature(Creature* creature, Direction direction, uint32_t flags/* = 0*/) Não confunda com o escopo da outra função de mesmo nome (C++ apresenta sobrecarga de funções).
     
    O trecho de código responsável pelo efeito ficará acima desta linha:
    return ret;  
    Como não temos uma estrutura tão versátil quanto as arrays de Lua em C++ para configurar os valores, trabalharemos com eles diretamente na estrutura condicional:
    if(Player* player = creature->getPlayer()) { uint32_t effect = 255; uint16_t playerLookType = (player->getCurrentOutfit()).lookType; if(playerLookType == BIKE_LOOK_TYPE_1) effect = EFFECT_BIKE_LOOK_TYPE_1; else if(playerLookType == BIKE_LOOK_TYPE_2) effect = EFFECT_BIKE_LOOK_TYPE_2; else if(playerLookType == BIKE_LOOK_TYPE_3) effect = EFFECT_BIKE_LOOK_TYPE_3; if(effect != 255) addMagicEffect(currentPos, effect); } Substitua BIKE_LOOK_TYPE_X pelo look type da bike em questão e EFFECT_BIKE_LOOK_TYPE_X pelo respectivo efeito. Para adicionar mais opções, basta continuar com os else if.
     
    Não tive a oportunidade de testar o código, mas acredito que funcionará como deve. Não esqueça de compilar o projeto e substituir o executável (por questão de DLLs).
     
    Naturalmente, caso prefira uma solução em Lua o código do Vodkart é mais que o suficiente.
  13. Gostei
    zipter98 recebeu reputação de Vodkart em [PEDIDO] Bike System - Efeito ao andar   
    Acredito que a forma mais limpa e eficiente de se escrever este pequeno sistema seria em C++, ao invés de usarmos em Lua uma função recursiva.
    Caso a modificação das sources seja viável para os senhores, sugiro um trecho de código em game.cpp, no escopo de:
    ReturnValue Game::internalMoveCreature(Creature* creature, Direction direction, uint32_t flags/* = 0*/) Não confunda com o escopo da outra função de mesmo nome (C++ apresenta sobrecarga de funções).
     
    O trecho de código responsável pelo efeito ficará acima desta linha:
    return ret;  
    Como não temos uma estrutura tão versátil quanto as arrays de Lua em C++ para configurar os valores, trabalharemos com eles diretamente na estrutura condicional:
    if(Player* player = creature->getPlayer()) { uint32_t effect = 255; uint16_t playerLookType = (player->getCurrentOutfit()).lookType; if(playerLookType == BIKE_LOOK_TYPE_1) effect = EFFECT_BIKE_LOOK_TYPE_1; else if(playerLookType == BIKE_LOOK_TYPE_2) effect = EFFECT_BIKE_LOOK_TYPE_2; else if(playerLookType == BIKE_LOOK_TYPE_3) effect = EFFECT_BIKE_LOOK_TYPE_3; if(effect != 255) addMagicEffect(currentPos, effect); } Substitua BIKE_LOOK_TYPE_X pelo look type da bike em questão e EFFECT_BIKE_LOOK_TYPE_X pelo respectivo efeito. Para adicionar mais opções, basta continuar com os else if.
     
    Não tive a oportunidade de testar o código, mas acredito que funcionará como deve. Não esqueça de compilar o projeto e substituir o executável (por questão de DLLs).
     
    Naturalmente, caso prefira uma solução em Lua o código do Vodkart é mais que o suficiente.
  14. Curtir
    zipter98 recebeu reputação de GrayFang em Ditto Memory System por talkaction   
    OK, isto não é exatamente um sistema, visto que é composto por um único arquivo com um único callback, mas enfim.
    Antes de começar a desenvolver o tópico, digo-lhes: o código é para poketibia, não outros derivados ou Tibia comum.
    Introdução:
     
    A pedidos de um amigo, resolvi escrever este script. Por não programar em OTClient, optei por escrevê-lo em uma talkaction. Para aqueles que não conhecem o sistema, consiste em praticidade para as transformações do Ditto: ao invés de repetir o cansativo processo de procurar o pokémon que deseja-se copiar, você pode simplesmente salvá-lo na memória do Ditto para, sempre que quiser, transformá-lo em um único comando. 
    Você pode configurar quantos slots de "memória" quiser.
    Para usar os comandos, você deve colocar uma pokebola com um Ditto no slot 8/feet (a.k.a "pokeball slot"). Alguns, no entanto, necessitam também que o pokémon esteja "solto".
    Comandos:
    /memory check Use este comando para verificar os atuais slots de seu Ditto. /memory forget [slot] Use este comando para deletar uma memória salva, respectiva ao slot indicado. Ex.: /memory forget 1 /memory save [slot] Use este comando para salvar uma memória, respectiva ao slot indicado. A memória salva será do pokémon que seu Ditto estará transformado no momento. Ex.: /memory save 3 /memory [slot] Use este comando para transformar seu Ditto no pokémon que estiver armazenado no slot indicado. Ex.: /memory 2 PS: Você também pode usar !memory.
    Instalação:
     
    Em data/talkactions/scripts, crie um arquivo com extensão .lua, nomeie-o dittomemory e coloque o seguinte conteúdo:



    Em data/talkactions, abra o arquivo talkactions.xml e coloque a seguinte tag: <talkaction words="/memory;!memory" event="script" value="dittomemory.lua"/> Versão testada: 8.54 Servidor testado: PDA by Slicer, versão 1.9 É um código bem simples, escrito em poucos minutos. Resolvi postá-lo pois gostei do resultado apresentado.  Para alguns, pode não ser tão útil; para outros, espero que sim. É isso aí, até mais.
  15. Gostei
    zipter98 recebeu reputação de thalesvenceslau em [SPELL] Magia De Trap em Area   
    local config = {     wallArea = {         {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, 1, 1, 1, 1, 0, 0},         {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0},         {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0},          {0, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0},         {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0},         {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0},         {0, 0, 1, 1, 1, 1, 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},      },     effect = xxx,          --Efeito.     wallId = xxx,          --ID da parede.     time = 5,              --Duração da parede.     cooldown = {20, 10},   --{sucessCooldown, failCooldown},     chance = 30,           --Chance da spell funcionar.     storage = 9571, } function isWalkable(pos, creature, proj, pz)-- by Nord     if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end     if getTopCreature(pos).uid > 0 and creature then return false end     if getTileInfo(pos).protection and pz then return false, true end     local n = not proj and 3 or 2     for i = 0, 255 do         pos.stackpos = i         local tile = getTileThingByPos(pos)         if tile.itemid ~= 0 and not isCreature(tile.uid) then             if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then                 return false             end         end     end     return true end function getPosfromArea(cid, area)    --by Dokmos     icenter = math.floor(table.getn(area)/2)+1     jcenter = math.floor(table.getn(area[1])/2)+1     center = area[icenter]     ivar = table.getn(area)     jvar = table.getn(area[1])     i = table.getn(area)^2     j = table.getn(area[1])^2     local mydir = isCreature(getCreatureTarget(cid)) and getCreatureDirectionToTarget(cid, getCreatureTarget(cid)) or getCreatureLookDir(cid)     setPlayerStorageValue(cid, 21101, -1)     if center[jcenter] == 3 then         if mydir == 0 then             signal = {-1,1,1,2}         elseif mydir == 1 then             signal = {1,-1,2,1}         elseif mydir == 2 then             signal = {1,-1,1,2}         elseif mydir == 3 then             signal = {-1,1,2,1}         end     else         signal = {-1,1,1,2}     end     POSITIONS = {}       P = 0           repeat         pvar = {0,0}         I = area[ivar]         J = I[jvar]         i = i-1         j = j-1         if J == 1 then             if jvar < jcenter then                   pvar[signal[3]] = signal[1]*math.abs((jcenter-jvar))              elseif jvar > jcenter then                   pvar[signal[3]] = signal[2]*math.abs((jcenter-jvar))              end                          if ivar < icenter then                   pvar[signal[4]] = signal[1]*math.abs((icenter-ivar))              elseif ivar > icenter then                 pvar[signal[4]] = signal[2]*math.abs((icenter-ivar))             end         end             if jvar > 1 then             jvar = (jvar-1)         elseif ivar > 1 then             jvar = table.getn(area[1])             ivar = (ivar-1)         end           local pos = getThingPos(cid)         local areapos = {x=pos.x+(pvar[1]),y=pos.y+(pvar[2]),z=pos.z}           if pos.x ~= areapos.x or pos.y ~= areapos.y then             P = P+1             POSITIONS[P] = areapos         end       until i <= 0 and j <= 0     return POSITIONS end function onCastSpell(cid)     if getPlayerStorageValue(cid, config.storage) > os.time() then         doPlayerSendCancel(cid, "Wait "..getPlayerStorageValue(cid, config.storage) - os.time().." second(s).")     else         if math.random(1, 100) > config.chance then             doPlayerSendCancel(cid, "Your spell failed.")             doSendAnimatedText(getThingPos(cid), "FAIL!", 215)             setPlayerStorageValue(cid, config.storage, os.time() + config.cooldown[2])         else             local positions = {}             setPlayerStorageValue(cid, config.storage, os.time() + config.cooldown[1])             for _, pos in pairs(getPosfromArea(cid, config.wallArea)) do                 if isWalkable(pos) and not getTileInfo(pos).protection then                     doCreateItem(config.wallId, 1, pos)                     doSendMagicEffect(pos, config.effect)                     table.insert(positions, pos)                 end             end             if #positions > 0 then                 addEvent(function()                     for i = 1, #positions do                         local item = getTileItemById(positions[i], config.wallId).uid                         if item > 0 then                             doRemoveItem(item)                         end                     end                 end, config.time * 1000)             end         end     end     return true end
  16. Gostei
    zipter98 recebeu reputação de Raziel Frehley em Item q Troca a outfit do player   
    local config = {     --[vocationId] = outfitId,     --Ex.:     [3] = 171,     [4] = 170,     [7] = 172,     [8] = 173, } function onUse(cid)     local outfit, playerOutfit = config[getPlayerVocation(cid)], getCreatureOutfit(cid)     if outfit then         if getCreatureCondition(cid, CONDITION_OUTFIT) and playerOutfit.lookType == outfit then             doRemoveCondition(cid, CONDITION_OUTFIT)             doPlayerSendTextMessage(cid, 27, "You removed your outfit.")         else             playerOutfit.lookType = outfit             doSetCreatureOutfit(cid, playerOutfit, -1)             doPlayerSendTextMessage(cid, 27, "You put an outfit.")         end     end     return true end
  17. Gostei
    zipter98 recebeu reputação de samuelandrade45 em [SPELL] Magia De Trap em Area   
    local config = {     wallArea = {         {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, 1, 1, 1, 1, 0, 0},         {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0},         {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0},          {0, 0, 1, 0, 0, 2, 0, 0, 1, 0, 0},         {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0},         {0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0},         {0, 0, 1, 1, 1, 1, 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},      },     effect = xxx,          --Efeito.     wallId = xxx,          --ID da parede.     time = 5,              --Duração da parede.     cooldown = {20, 10},   --{sucessCooldown, failCooldown},     chance = 30,           --Chance da spell funcionar.     storage = 9571, } function isWalkable(pos, creature, proj, pz)-- by Nord     if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end     if getTopCreature(pos).uid > 0 and creature then return false end     if getTileInfo(pos).protection and pz then return false, true end     local n = not proj and 3 or 2     for i = 0, 255 do         pos.stackpos = i         local tile = getTileThingByPos(pos)         if tile.itemid ~= 0 and not isCreature(tile.uid) then             if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then                 return false             end         end     end     return true end function getPosfromArea(cid, area)    --by Dokmos     icenter = math.floor(table.getn(area)/2)+1     jcenter = math.floor(table.getn(area[1])/2)+1     center = area[icenter]     ivar = table.getn(area)     jvar = table.getn(area[1])     i = table.getn(area)^2     j = table.getn(area[1])^2     local mydir = isCreature(getCreatureTarget(cid)) and getCreatureDirectionToTarget(cid, getCreatureTarget(cid)) or getCreatureLookDir(cid)     setPlayerStorageValue(cid, 21101, -1)     if center[jcenter] == 3 then         if mydir == 0 then             signal = {-1,1,1,2}         elseif mydir == 1 then             signal = {1,-1,2,1}         elseif mydir == 2 then             signal = {1,-1,1,2}         elseif mydir == 3 then             signal = {-1,1,2,1}         end     else         signal = {-1,1,1,2}     end     POSITIONS = {}       P = 0           repeat         pvar = {0,0}         I = area[ivar]         J = I[jvar]         i = i-1         j = j-1         if J == 1 then             if jvar < jcenter then                   pvar[signal[3]] = signal[1]*math.abs((jcenter-jvar))              elseif jvar > jcenter then                   pvar[signal[3]] = signal[2]*math.abs((jcenter-jvar))              end                          if ivar < icenter then                   pvar[signal[4]] = signal[1]*math.abs((icenter-ivar))              elseif ivar > icenter then                 pvar[signal[4]] = signal[2]*math.abs((icenter-ivar))             end         end             if jvar > 1 then             jvar = (jvar-1)         elseif ivar > 1 then             jvar = table.getn(area[1])             ivar = (ivar-1)         end           local pos = getThingPos(cid)         local areapos = {x=pos.x+(pvar[1]),y=pos.y+(pvar[2]),z=pos.z}           if pos.x ~= areapos.x or pos.y ~= areapos.y then             P = P+1             POSITIONS[P] = areapos         end       until i <= 0 and j <= 0     return POSITIONS end function onCastSpell(cid)     if getPlayerStorageValue(cid, config.storage) > os.time() then         doPlayerSendCancel(cid, "Wait "..getPlayerStorageValue(cid, config.storage) - os.time().." second(s).")     else         if math.random(1, 100) > config.chance then             doPlayerSendCancel(cid, "Your spell failed.")             doSendAnimatedText(getThingPos(cid), "FAIL!", 215)             setPlayerStorageValue(cid, config.storage, os.time() + config.cooldown[2])         else             local positions = {}             setPlayerStorageValue(cid, config.storage, os.time() + config.cooldown[1])             for _, pos in pairs(getPosfromArea(cid, config.wallArea)) do                 if isWalkable(pos) and not getTileInfo(pos).protection then                     doCreateItem(config.wallId, 1, pos)                     doSendMagicEffect(pos, config.effect)                     table.insert(positions, pos)                 end             end             if #positions > 0 then                 addEvent(function()                     for i = 1, #positions do                         local item = getTileItemById(positions[i], config.wallId).uid                         if item > 0 then                             doRemoveItem(item)                         end                     end                 end, config.time * 1000)             end         end     end     return true end
  18. Gostei
    zipter98 recebeu reputação de PegasusBR em Ditto Memory System por talkaction   
    OK, isto não é exatamente um sistema, visto que é composto por um único arquivo com um único callback, mas enfim.
    Antes de começar a desenvolver o tópico, digo-lhes: o código é para poketibia, não outros derivados ou Tibia comum.
    Introdução:
     
    A pedidos de um amigo, resolvi escrever este script. Por não programar em OTClient, optei por escrevê-lo em uma talkaction. Para aqueles que não conhecem o sistema, consiste em praticidade para as transformações do Ditto: ao invés de repetir o cansativo processo de procurar o pokémon que deseja-se copiar, você pode simplesmente salvá-lo na memória do Ditto para, sempre que quiser, transformá-lo em um único comando. 
    Você pode configurar quantos slots de "memória" quiser.
    Para usar os comandos, você deve colocar uma pokebola com um Ditto no slot 8/feet (a.k.a "pokeball slot"). Alguns, no entanto, necessitam também que o pokémon esteja "solto".
    Comandos:
    /memory check Use este comando para verificar os atuais slots de seu Ditto. /memory forget [slot] Use este comando para deletar uma memória salva, respectiva ao slot indicado. Ex.: /memory forget 1 /memory save [slot] Use este comando para salvar uma memória, respectiva ao slot indicado. A memória salva será do pokémon que seu Ditto estará transformado no momento. Ex.: /memory save 3 /memory [slot] Use este comando para transformar seu Ditto no pokémon que estiver armazenado no slot indicado. Ex.: /memory 2 PS: Você também pode usar !memory.
    Instalação:
     
    Em data/talkactions/scripts, crie um arquivo com extensão .lua, nomeie-o dittomemory e coloque o seguinte conteúdo:



    Em data/talkactions, abra o arquivo talkactions.xml e coloque a seguinte tag: <talkaction words="/memory;!memory" event="script" value="dittomemory.lua"/> Versão testada: 8.54 Servidor testado: PDA by Slicer, versão 1.9 É um código bem simples, escrito em poucos minutos. Resolvi postá-lo pois gostei do resultado apresentado.  Para alguns, pode não ser tão útil; para outros, espero que sim. É isso aí, até mais.
  19. Curtir
    zipter98 recebeu reputação de Lemitron em Ditto Memory System por talkaction   
    OK, isto não é exatamente um sistema, visto que é composto por um único arquivo com um único callback, mas enfim.
    Antes de começar a desenvolver o tópico, digo-lhes: o código é para poketibia, não outros derivados ou Tibia comum.
    Introdução:
     
    A pedidos de um amigo, resolvi escrever este script. Por não programar em OTClient, optei por escrevê-lo em uma talkaction. Para aqueles que não conhecem o sistema, consiste em praticidade para as transformações do Ditto: ao invés de repetir o cansativo processo de procurar o pokémon que deseja-se copiar, você pode simplesmente salvá-lo na memória do Ditto para, sempre que quiser, transformá-lo em um único comando. 
    Você pode configurar quantos slots de "memória" quiser.
    Para usar os comandos, você deve colocar uma pokebola com um Ditto no slot 8/feet (a.k.a "pokeball slot"). Alguns, no entanto, necessitam também que o pokémon esteja "solto".
    Comandos:
    /memory check Use este comando para verificar os atuais slots de seu Ditto. /memory forget [slot] Use este comando para deletar uma memória salva, respectiva ao slot indicado. Ex.: /memory forget 1 /memory save [slot] Use este comando para salvar uma memória, respectiva ao slot indicado. A memória salva será do pokémon que seu Ditto estará transformado no momento. Ex.: /memory save 3 /memory [slot] Use este comando para transformar seu Ditto no pokémon que estiver armazenado no slot indicado. Ex.: /memory 2 PS: Você também pode usar !memory.
    Instalação:
     
    Em data/talkactions/scripts, crie um arquivo com extensão .lua, nomeie-o dittomemory e coloque o seguinte conteúdo:



    Em data/talkactions, abra o arquivo talkactions.xml e coloque a seguinte tag: <talkaction words="/memory;!memory" event="script" value="dittomemory.lua"/> Versão testada: 8.54 Servidor testado: PDA by Slicer, versão 1.9 É um código bem simples, escrito em poucos minutos. Resolvi postá-lo pois gostei do resultado apresentado.  Para alguns, pode não ser tão útil; para outros, espero que sim. É isso aí, até mais.
  20. Gostei
    zipter98 recebeu reputação de welingtonpk em Ditto Memory System por talkaction   
    OK, isto não é exatamente um sistema, visto que é composto por um único arquivo com um único callback, mas enfim.
    Antes de começar a desenvolver o tópico, digo-lhes: o código é para poketibia, não outros derivados ou Tibia comum.
    Introdução:
     
    A pedidos de um amigo, resolvi escrever este script. Por não programar em OTClient, optei por escrevê-lo em uma talkaction. Para aqueles que não conhecem o sistema, consiste em praticidade para as transformações do Ditto: ao invés de repetir o cansativo processo de procurar o pokémon que deseja-se copiar, você pode simplesmente salvá-lo na memória do Ditto para, sempre que quiser, transformá-lo em um único comando. 
    Você pode configurar quantos slots de "memória" quiser.
    Para usar os comandos, você deve colocar uma pokebola com um Ditto no slot 8/feet (a.k.a "pokeball slot"). Alguns, no entanto, necessitam também que o pokémon esteja "solto".
    Comandos:
    /memory check Use este comando para verificar os atuais slots de seu Ditto. /memory forget [slot] Use este comando para deletar uma memória salva, respectiva ao slot indicado. Ex.: /memory forget 1 /memory save [slot] Use este comando para salvar uma memória, respectiva ao slot indicado. A memória salva será do pokémon que seu Ditto estará transformado no momento. Ex.: /memory save 3 /memory [slot] Use este comando para transformar seu Ditto no pokémon que estiver armazenado no slot indicado. Ex.: /memory 2 PS: Você também pode usar !memory.
    Instalação:
     
    Em data/talkactions/scripts, crie um arquivo com extensão .lua, nomeie-o dittomemory e coloque o seguinte conteúdo:



    Em data/talkactions, abra o arquivo talkactions.xml e coloque a seguinte tag: <talkaction words="/memory;!memory" event="script" value="dittomemory.lua"/> Versão testada: 8.54 Servidor testado: PDA by Slicer, versão 1.9 É um código bem simples, escrito em poucos minutos. Resolvi postá-lo pois gostei do resultado apresentado.  Para alguns, pode não ser tão útil; para outros, espero que sim. É isso aí, até mais.
  21. Gostei
    zipter98 recebeu reputação de Jughead em Ditto Memory System por talkaction   
    OK, isto não é exatamente um sistema, visto que é composto por um único arquivo com um único callback, mas enfim.
    Antes de começar a desenvolver o tópico, digo-lhes: o código é para poketibia, não outros derivados ou Tibia comum.
    Introdução:
     
    A pedidos de um amigo, resolvi escrever este script. Por não programar em OTClient, optei por escrevê-lo em uma talkaction. Para aqueles que não conhecem o sistema, consiste em praticidade para as transformações do Ditto: ao invés de repetir o cansativo processo de procurar o pokémon que deseja-se copiar, você pode simplesmente salvá-lo na memória do Ditto para, sempre que quiser, transformá-lo em um único comando. 
    Você pode configurar quantos slots de "memória" quiser.
    Para usar os comandos, você deve colocar uma pokebola com um Ditto no slot 8/feet (a.k.a "pokeball slot"). Alguns, no entanto, necessitam também que o pokémon esteja "solto".
    Comandos:
    /memory check Use este comando para verificar os atuais slots de seu Ditto. /memory forget [slot] Use este comando para deletar uma memória salva, respectiva ao slot indicado. Ex.: /memory forget 1 /memory save [slot] Use este comando para salvar uma memória, respectiva ao slot indicado. A memória salva será do pokémon que seu Ditto estará transformado no momento. Ex.: /memory save 3 /memory [slot] Use este comando para transformar seu Ditto no pokémon que estiver armazenado no slot indicado. Ex.: /memory 2 PS: Você também pode usar !memory.
    Instalação:
     
    Em data/talkactions/scripts, crie um arquivo com extensão .lua, nomeie-o dittomemory e coloque o seguinte conteúdo:



    Em data/talkactions, abra o arquivo talkactions.xml e coloque a seguinte tag: <talkaction words="/memory;!memory" event="script" value="dittomemory.lua"/> Versão testada: 8.54 Servidor testado: PDA by Slicer, versão 1.9 É um código bem simples, escrito em poucos minutos. Resolvi postá-lo pois gostei do resultado apresentado.  Para alguns, pode não ser tão útil; para outros, espero que sim. É isso aí, até mais.
  22. Gostei
    Aqui está o código usando uma array. Aproveitei e corrigi um pequeno bug que poderia ser causado caso cid fosse uma criatura diferente de jogador.

    local storage = {25091, 25092, 25093}      --Storages. function onStepIn(cid, item, position, fromPosition)     if not isPlayer(cid) then         return true     end     for i = 1, #storage do         if getPlayerStorageValue(cid, storage[i]) < 1 then             return doPlayerSendCancel(cid, "You have not completed the "..i.." mission.") and doTeleportThing(cid, fromPosition)         end     end     doPlayerSendCancel(cid, "You accessed the prohibited area.")     doSendMagicEffect(position, 13)     return true end
  23. Gostei
    zipter98 recebeu reputação de Savidotti em Erro Login.lua   
    É mais provável que, nos códigos das seguintes funções, não esteja sendo verificado se o jogador possui uma pokeball no slot.
    Se possível, poste o código delas (se encontram em algum lugar de data/lib).

    doUpdateMoves(cid) doUpdatePokemonsBar(cid) onPokeHealthChange(cid) doPlayerChangeModeIcon(cid)
  24. Gostei
    zipter98 recebeu reputação de Alexandre1023 em Ditto Memory System por talkaction   
    OK, isto não é exatamente um sistema, visto que é composto por um único arquivo com um único callback, mas enfim.
    Antes de começar a desenvolver o tópico, digo-lhes: o código é para poketibia, não outros derivados ou Tibia comum.
    Introdução:
     
    A pedidos de um amigo, resolvi escrever este script. Por não programar em OTClient, optei por escrevê-lo em uma talkaction. Para aqueles que não conhecem o sistema, consiste em praticidade para as transformações do Ditto: ao invés de repetir o cansativo processo de procurar o pokémon que deseja-se copiar, você pode simplesmente salvá-lo na memória do Ditto para, sempre que quiser, transformá-lo em um único comando. 
    Você pode configurar quantos slots de "memória" quiser.
    Para usar os comandos, você deve colocar uma pokebola com um Ditto no slot 8/feet (a.k.a "pokeball slot"). Alguns, no entanto, necessitam também que o pokémon esteja "solto".
    Comandos:
    /memory check Use este comando para verificar os atuais slots de seu Ditto. /memory forget [slot] Use este comando para deletar uma memória salva, respectiva ao slot indicado. Ex.: /memory forget 1 /memory save [slot] Use este comando para salvar uma memória, respectiva ao slot indicado. A memória salva será do pokémon que seu Ditto estará transformado no momento. Ex.: /memory save 3 /memory [slot] Use este comando para transformar seu Ditto no pokémon que estiver armazenado no slot indicado. Ex.: /memory 2 PS: Você também pode usar !memory.
    Instalação:
     
    Em data/talkactions/scripts, crie um arquivo com extensão .lua, nomeie-o dittomemory e coloque o seguinte conteúdo:



    Em data/talkactions, abra o arquivo talkactions.xml e coloque a seguinte tag: <talkaction words="/memory;!memory" event="script" value="dittomemory.lua"/> Versão testada: 8.54 Servidor testado: PDA by Slicer, versão 1.9 É um código bem simples, escrito em poucos minutos. Resolvi postá-lo pois gostei do resultado apresentado.  Para alguns, pode não ser tão útil; para outros, espero que sim. É isso aí, até mais.
  25. Gostei
    zipter98 recebeu reputação de brendoonh em Castle War (Estilo TibiaRPGBrasil)   
    Diga-me se entendi corretamente o sistema: dá o horário, libera a entrada do evento -> mata guarda -> nasce geradores -> mata geradores -> libera grades para  o próximo andar. No último andar, depois de matar os geradores, as grades para a sala do Crystal são liberadas. Isso mesmo?
    E a premiação para as quatro vocações que deram mais dano será a mesma? Por exemplo, os itens possíveis como prêmio são 10, 50 e 100 para sorcerer, paladin, knight e druid?
    A ideia é interessante, posso tentar fazer. Porém, antes, tenho outros sistemas para terminar.
    Ah, cada guarda será um monstro diferente, certo? E os geradores? Serão os mesmos para todos os andares, ou terá, por exemplo, Gerador 1, Gerador 2, etc?

Informação Importante

Confirmação de Termo