Postado Maio 5, 2015 10 anos Este é um post popular. 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: Mostrar conteúdo oculto local maxSlots = 3 --Quantia máxima de slots. function getDittoSlots(item) if not item or item < 1 then return false elseif getItemAttribute(item, "poke") and getItemAttribute(item, "poke") ~= "Ditto" then return false end local slots = {} for i = 1, maxSlots do local attr = getItemAttribute(item, "memory"..i) if attr then slots[i] = attr end end return slots end function hasDittoSavedPokemon(item, name) if not item or item < 1 then return false elseif getItemAttribute(item, "poke") and getItemAttribute(item, "poke") ~= "Ditto" then return false end local check for i = 1, maxSlots do local attr = getItemAttribute(item, "memory"..i) if attr and attr == name then check = true break end end return check end function onSay(cid, words, param) local item = getPlayerSlotItem(cid, 8).uid if item < 1 then doPlayerSendCancel(cid, "Put a pokeball in the pokeball slot.") elseif getItemAttribute(item, "poke") ~= "Ditto" then doPlayerSendCancel(cid, "Put a pokeball with a Ditto in the pokeball slot.") elseif param == "" then doPlayerSendCancel(cid, "Especify a param.") else param = param:lower() if param == "check" then local str = "" for i = 1, maxSlots do local attr = getItemAttribute(item, "memory"..i) or "No memory" if str == "" then str = i.." - "..attr else str = str.."\n"..i.." - "..attr end end doPlayerPopupFYI(cid, "Ditto Memory:\n"..str.."") elseif param:find("forget") then local slot = tonumber(param:match("forget (.+)")) if slot and slot <= maxSlots and slot > 0 then if getDittoSlots(item)[slot] then doItemSetAttribute(item, "memory"..slot, false) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Ditto Memory] Slot "..slot.." deleted.") else doPlayerSendCancel(cid, "This slot is empty.") end else doPlayerSendCancel(cid, "Invalid slot.") end else local summons = getCreatureSummons(cid) if #summons == 0 then doPlayerSendCancel(cid, "You don't have any pokemon out of the pokeball.") else if param:find("save") then local transformedPoke = getItemAttribute(item, "transName") if transformedPoke and type(transformedPoke) == "string" then local slot = tonumber(param:match("save (.+)")) if slot and slot <= maxSlots and slot > 0 then if not getDittoSlots(item)[slot] and not hasDittoSavedPokemon(item, transformedPoke) then doItemSetAttribute(item, "memory"..slot, transformedPoke) doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Ditto Memory] You saved at the slot "..slot..": "..transformedPoke..".") else doPlayerSendCancel(cid, "This slot isn't empty or your Ditto already has this pokemon saved in his memory.") end else doPlayerSendCancel(cid, "Invalid slot.") end else doPlayerSendCancel(cid, "Your Ditto isn't transformed in any pokemon.") end else local slot = tonumber(param) local transformPoke = getDittoSlots(item)[slot] if not slot then doPlayerSendCancel(cid, "Invalid param.") elseif slot <= 0 or slot > maxSlots then doPlayerSendCancel(cid, "Use a valid slot.") elseif not transformPoke then doPlayerSendCancel(cid, "This slot is empty.") elseif getPlayerStorageValue(summons[1], 1010) == transformPoke then doPlayerSendCancel(cid, "Your Ditto is already transformed in this pokemon.") else doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "[Ditto Memory] Using the slot "..slot..", your Ditto transformed into a "..transformPoke..".") setPlayerStorageValue(summons[1], 1010, transformPoke) doSetCreatureOutfit(summons[1], {lookType = getPokemonXMLOutfit(transformPoke)}, -1) doSendMagicEffect(getThingPos(summons[1]), 184) doCreatureSay(summons[1], "TRANSFORM!", TALKTYPE_MONSTER) doItemSetAttribute(item, "transName", transformPoke) doItemSetAttribute(item, "transOutfit", getPokemonXMLOutfit(transformPoke)) if useKpdoDlls then doUpdateMoves(cid) end if dittoCopiesStatusToo then setPlayerStorageValue(summons[1], 1001, dittoBonus * pokes[transformPoke].offense * getPlayerLevel(cid)) setPlayerStorageValue(summons[1], 1002, dittoBonus * pokes[transformPoke].defense) setPlayerStorageValue(summons[1], 1003, pokes[transformPoke].agility) setPlayerStorageValue(summons[1], 1004, dittoBonus * pokes[transformPoke].vitality * getPlayerLevel(cid)) setPlayerStorageValue(summons[1], 1005, dittoBonus * pokes[transformPoke].specialattack * getPlayerLevel(cid)) local pct = getCreatureHealth(summons[1]) / getCreatureMaxHealth(summons[1]) local vit = getVitality(summons[1]) * getPlayerLevel(cid) / 100 setCreatureMaxHealth(summons[1], vit * HPperVITsummon) doCreatureAddHealth(summons[1], pct * vit * HPperVITsummon) end end end end end end return true end 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. Editado Maio 5, 2015 10 anos por zipter98 (veja o histórico de edições) não respondo pms solicitando suporte em programação/scripting
Postado Maio 5, 2015 10 anos Muito legal zipter, tópico aprovado e movido a área correta. ➥ Regras | Seções OTServ | Seções BOT
Postado Maio 5, 2015 10 anos Não vou utilizar hoje, mais pode ser útil futuramente. REP+ Ando devagar, porque já tive pressa. E levo esse sorriso, porque já chorei demais... ________________________________________________________________________________ Minhas Sprites: Mostrar conteúdo oculto Mega Metagross Mega Abomasnow Pack de Shinys [Posso atualizá-lo com novos shinys a qualquer momento] Tutoriais: Mostrar conteúdo oculto [Completo] Criando e adicionando um novo Pokémon [Actions] Criando quest no RME Editores Lua/Xml/Sync Entre outros: Editores Win/Mac/Linux
Postado Maio 6, 2015 10 anos excelente código, espero que seja bem aproveitado porque tem vários ditto system com bugs e esse está ótimo! parabéns [*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*] DISCORD: vodkart#6090
Postado Maio 6, 2015 10 anos Opa partiu testar no meu shiny ditto aki e ver como fica rep++ @edit o seu serve tinha o ditto system do tiu gab? porque o meu serve possui o sistema dele e seu memory não funfou :/ no sistema dele o codigo de indentificação do ditto é assim \/ Mostrar conteúdo oculto if getItemAttribute(getPlayerSlotItem(cid, 8).uid, "ehditto") == 1 then Editado Maio 6, 2015 10 anos por tioj (veja o histórico de edições) Minhas Gambiarras Mostrar conteúdo oculto [PDA] Pokedex Mostrando o Catch http://www.tibiaking.com/forum/topic/54998-pda-arrumando-a-dex/?view=findpost&p=323041
Participe da conversa
Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.