Ir para conteúdo
  • Cadastre-se

Derivado [BUG]Tentei arrumar dex e deu erro


Posts Recomendados

Eu tava tentando arrumar a dex baseando por esse tutorial que encontrei aqui no forum

Link:


Fiz tudo certinho esse tutorial prometia que quando eu desse dex no meu personagem abriria uma janela e mostraria tudo catch, pokes liberados e etc

so que quando eu dou dex em mim aparece o seguinte erro:

[07/02/2017 09:15:09] [Error - Action Interface]
[07/02/2017 09:15:09] data/actions/scripts/pokedex.lua:onUse
[07/02/2017 09:15:09] Description:
[07/02/2017 09:15:09] data/lib/catch system.lua:358: attempt to concatenate local 'poke' (a table value)
[07/02/2017 09:15:09] stack traceback:
[07/02/2017 09:15:10]     data/lib/catch system.lua:358: in function 'getPlayerInfoAboutPokemon'
[07/02/2017 09:15:10]     data/actions/scripts/pokedex.lua:44: in function <data/actions/scripts/pokedex.lua:3>

 

Uso base pokexcyan, alguem me ajuda com esse erro?

Editado por Loouis (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Estou com o mesmo problema amigo. :/ 

                                                                             1535210279_tumblr_o9b6yoxM1Z1tco8kto1_500(3).gif.f527686e19da738322c39555244decac.gif

                                                             Meus tópicos         

                                                         Se ajudei você deixe seu Rep! para fortalecer a amizade ^^

                                                                              Vamos ajudar o fórum a crescer mais.

                                                                          1641206641_gif-escudo-fla-3d(1).gif.a5d3c0c24824d5272a181aa91c5eda0c.gif

                                                                                                Mengão porra! . .

                                                                     tumblr_oxm8eriUeU1sqwgnro2_400.gif.22e347b2fc58fdfd88dbf84f4bdaa1bc.gif

                                                                                ----- NPC que vende informação -----

                                                                           -----Baú Que dá Outfit se tiver Level -----

                                                                     ----- [Npc] Que vende Stones (itens) por diamonds -----

 

 

                                                                       

                       

Link para o post
Compartilhar em outros sites

@Loouis Olá brother, pesquisei um pouco e consegui a solução, pelo menos no meu kk 

Se vc seguiu fielmente o tutorial...  [PDA] Arrumando a Dex! troque seu pokedex do actions por esse:

Spoiler

local function checkDex(cid)
local unlock = 0
    for i = 1, #oldpokedex do
        if getPlayerInfoAboutPokemon(cid, oldpokedex[1]).dex then
           unlock = unlock + 1
        end
    end
return unlock
end
local rate = 20
 
function onUse(cid, item, fromPos, item2, toPos)
 
if not isCreature(item2.uid) then
return true
end
 
local poke = getCreatureName(item2.uid)
 
if isMonster(item2.uid) then
       local this = newpokedex[getCreatureName(item2.uid)]
  local myball = 0
  if isSummon(item2.uid) then
     myball = getPlayerSlotItem(getCreatureMaster(item2.uid), 8)
       end
       if not getPlayerInfoAboutPokemon(cid, poke).dex then
     local exp = this.level * rate
          doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce ter desbloqueado ".. getCreatureName(item2.uid).." na sua pokedex!")
     doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce ganhou "..exp.." pontos de experiencia.")
          doSendMagicEffect(getThingPos(cid), 210)
          doPlayerAddExperience(cid, exp)
          doAddPokemonInDexList(cid, poke)
       else
          doShowPokedexRegistration(cid, item2, myball)
       end
return true
end
 
if not isPlayer(item2.uid) then return true end
 
local kanto = 0
local johto = 0
                                    --alterado v1.7 \/\/
for i = 1, #oldpokedex do
if getPlayerInfoAboutPokemon(item2.uid, oldpokedex[1]).dex then
  if i <= 151 then
              kanto = kanto+1
           elseif i >= 209 then
              johto = johto+1
           end
end
end                                                      --alterado v1.6
 
local player = getRecorderPlayer(toPos, cid)
 
if cid == player then
   doPlayerSendTextMessage(cid, 27, "Você tem desbloqueado "..kanto.." kanto's e "..johto.." johto's pokémons até agora.") 
        doPlayerSetVocation(cid, 9) --alterado v1.6
        openChannelDialog(cid)
end
 
return true
end

Testa ai e posta  o resultado ^^ 

                                                                             1535210279_tumblr_o9b6yoxM1Z1tco8kto1_500(3).gif.f527686e19da738322c39555244decac.gif

                                                             Meus tópicos         

                                                         Se ajudei você deixe seu Rep! para fortalecer a amizade ^^

                                                                              Vamos ajudar o fórum a crescer mais.

                                                                          1641206641_gif-escudo-fla-3d(1).gif.a5d3c0c24824d5272a181aa91c5eda0c.gif

                                                                                                Mengão porra! . .

                                                                     tumblr_oxm8eriUeU1sqwgnro2_400.gif.22e347b2fc58fdfd88dbf84f4bdaa1bc.gif

                                                                                ----- NPC que vende informação -----

                                                                           -----Baú Que dá Outfit se tiver Level -----

                                                                     ----- [Npc] Que vende Stones (itens) por diamonds -----

 

 

                                                                       

                       

Link para o post
Compartilhar em outros sites
20 horas atrás, Loouis disse:

Eu tava tentando arrumar a dex baseando por esse tutorial que encontrei aqui no forum

Link:


Fiz tudo certinho esse tutorial prometia que quando eu desse dex no meu personagem abriria uma janela e mostraria tudo catch, pokes liberados e etc

so que quando eu dou dex em mim aparece o seguinte erro:

[07/02/2017 09:15:09] [Error - Action Interface]
[07/02/2017 09:15:09] data/actions/scripts/pokedex.lua:onUse
[07/02/2017 09:15:09] Description:
[07/02/2017 09:15:09] data/lib/catch system.lua:358: attempt to concatenate local 'poke' (a table value)
[07/02/2017 09:15:09] stack traceback:
[07/02/2017 09:15:10]     data/lib/catch system.lua:358: in function 'getPlayerInfoAboutPokemon'
[07/02/2017 09:15:10]     data/actions/scripts/pokedex.lua:44: in function <data/actions/scripts/pokedex.lua:3>

 

Uso base pokexcyan, alguem me ajuda com esse erro?

4 horas atrás, Sepultura disse:

@Loouis Olá brother, pesquisei um pouco e consegui a solução, pelo menos no meu kk 

Se vc seguiu fielmente o tutorial...  [PDA] Arrumando a Dex! troque seu pokedex do actions por esse:

  Mostrar conteúdo oculto

local function checkDex(cid)
local unlock = 0
    for i = 1, #oldpokedex do
        if getPlayerInfoAboutPokemon(cid, oldpokedex[1]).dex then
           unlock = unlock + 1
        end
    end
return unlock
end
local rate = 20
 
function onUse(cid, item, fromPos, item2, toPos)
 
if not isCreature(item2.uid) then
return true
end
 
local poke = getCreatureName(item2.uid)
 
if isMonster(item2.uid) then
       local this = newpokedex[getCreatureName(item2.uid)]
  local myball = 0
  if isSummon(item2.uid) then
     myball = getPlayerSlotItem(getCreatureMaster(item2.uid), 8)
       end
       if not getPlayerInfoAboutPokemon(cid, poke).dex then
     local exp = this.level * rate
          doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce ter desbloqueado ".. getCreatureName(item2.uid).." na sua pokedex!")
     doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce ganhou "..exp.." pontos de experiencia.")
          doSendMagicEffect(getThingPos(cid), 210)
          doPlayerAddExperience(cid, exp)
          doAddPokemonInDexList(cid, poke)
       else
          doShowPokedexRegistration(cid, item2, myball)
       end
return true
end
 
if not isPlayer(item2.uid) then return true end
 
local kanto = 0
local johto = 0
                                    --alterado v1.7 \/\/
for i = 1, #oldpokedex do
if getPlayerInfoAboutPokemon(item2.uid, oldpokedex[1]).dex then
  if i <= 151 then
              kanto = kanto+1
           elseif i >= 209 then
              johto = johto+1
           end
end
end                                                      --alterado v1.6
 
local player = getRecorderPlayer(toPos, cid)
 
if cid == player then
   doPlayerSendTextMessage(cid, 27, "Você tem desbloqueado "..kanto.." kanto's e "..johto.." johto's pokémons até agora.") 
        doPlayerSetVocation(cid, 9) --alterado v1.6
        openChannelDialog(cid)
end
 
return true
end

Testa ai e posta  o resultado ^^ 

[10/02/2017 14:01:09] [Error - Action Interface]
[10/02/2017 14:01:09] data/actions/scripts/pokedex.lua:onUse
[10/02/2017 14:01:10] Description:
[10/02/2017 14:01:10] data/lib/catch system.lua:358: attempt to concatenate local 'poke' (a table value)
[10/02/2017 14:01:10] stack traceback:
[10/02/2017 14:01:10]     data/lib/catch system.lua:358: in function 'getPlayerInfoAboutPokemon'
[10/02/2017 14:01:10]     data/actions/scripts/pokedex.lua:45: in function <data/actions/scripts/pokedex.lua:12>

 

Bom... deu o mesmo erro so que percebe que mudou a linha do pokedex.lua?

Antes era a linha 3 agora 12...nao aparece nada so esse erro :/

Link para o post
Compartilhar em outros sites

@Loouis Boa tarde amigo, Estranho pois o meu erro era idêntico ao seu :/ 

Faz o seguinte pega o seu pokedex do actions original e adiciona antes da linha local rate = 

Spoiler

local function checkDex(cid)
local unlock = 0
    for i = 1, #oldpokedex do
        if getPlayerInfoAboutPokemon(cid, oldpokedex[1]).dex then
           unlock = unlock + 1
        end
    end
return unlock
end

Fico no aguardo. ^^ 

                                                                             1535210279_tumblr_o9b6yoxM1Z1tco8kto1_500(3).gif.f527686e19da738322c39555244decac.gif

                                                             Meus tópicos         

                                                         Se ajudei você deixe seu Rep! para fortalecer a amizade ^^

                                                                              Vamos ajudar o fórum a crescer mais.

                                                                          1641206641_gif-escudo-fla-3d(1).gif.a5d3c0c24824d5272a181aa91c5eda0c.gif

                                                                                                Mengão porra! . .

                                                                     tumblr_oxm8eriUeU1sqwgnro2_400.gif.22e347b2fc58fdfd88dbf84f4bdaa1bc.gif

                                                                                ----- NPC que vende informação -----

                                                                           -----Baú Que dá Outfit se tiver Level -----

                                                                     ----- [Npc] Que vende Stones (itens) por diamonds -----

 

 

                                                                       

                       

Link para o post
Compartilhar em outros sites
14 minutos atrás, Sepultura disse:

@Loouis Boa tarde amigo, Estranho pois o meu erro era idêntico ao seu :/ 

Faz o seguinte pega o seu pokedex do actions original e adiciona antes da linha local rate = 

  Ocultar conteúdo

local function checkDex(cid)
local unlock = 0
    for i = 1, #oldpokedex do
        if getPlayerInfoAboutPokemon(cid, oldpokedex[1]).dex then
           unlock = unlock + 1
        end
    end
return unlock
end

Fico no aguardo. ^^ 

mesmo erro :c

nao tem como me passar o seu pokedex.lua da actions completo?

qual base voce usa?

Editado por Loouis (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

@Loouis Bom dia amigo, troca essa parte do pokedex da actions:

Spoiler

for i = 1, #oldpokedex do
        if getPlayerInfoAboutPokemon(cid, oldpokedex[i][1]).dex then
            unlock = unlock + 1
        end
    end

 

por essa:

Spoiler

for i = 1, #oldpokedex do
        if oldpokedex[i] and oldpokedex[i][1] and getPlayerInfoAboutPokemon(cid, oldpokedex[i][1]) and getPlayerInfoAboutPokemon(cid, oldpokedex[i][1]).dex then
            unlock = unlock + 1
        end
    end

 

 

                                                                             1535210279_tumblr_o9b6yoxM1Z1tco8kto1_500(3).gif.f527686e19da738322c39555244decac.gif

                                                             Meus tópicos         

                                                         Se ajudei você deixe seu Rep! para fortalecer a amizade ^^

                                                                              Vamos ajudar o fórum a crescer mais.

                                                                          1641206641_gif-escudo-fla-3d(1).gif.a5d3c0c24824d5272a181aa91c5eda0c.gif

                                                                                                Mengão porra! . .

                                                                     tumblr_oxm8eriUeU1sqwgnro2_400.gif.22e347b2fc58fdfd88dbf84f4bdaa1bc.gif

                                                                                ----- NPC que vende informação -----

                                                                           -----Baú Que dá Outfit se tiver Level -----

                                                                     ----- [Npc] Que vende Stones (itens) por diamonds -----

 

 

                                                                       

                       

Link para o post
Compartilhar em outros sites

:(

mesmo erro...

[11/02/2017 09:38:34] [Error - Action Interface]
[11/02/2017 09:38:34] data/actions/scripts/pokedex.lua:onUse
[11/02/2017 09:38:34] Description:
[11/02/2017 09:38:34] data/lib/catch system.lua:358: attempt to concatenate local 'poke' (a table value)
[11/02/2017 09:38:34] stack traceback:
[11/02/2017 09:38:34]     data/lib/catch system.lua:358: in function 'getPlayerInfoAboutPokemon'
[11/02/2017 09:38:34]     data/actions/scripts/pokedex.lua:45: in function <data/actions/scripts/pokedex.lua:12>

 

Quando eu dou dex em algum pokemon, aparece essas duas abas de dex

aaaaaaaaaaaaaaaasas.png

Link para o post
Compartilhar em outros sites

@Loouis Faz o seguinte, retira essa nova dex e deixa a antiga, me passa teu pokedex da actions, newpokedex do creaturescripts, pokedex da talkactions, catchsystem.lua da lib,  pokedex system da lib e seu some functions da lib.  

                                                                             1535210279_tumblr_o9b6yoxM1Z1tco8kto1_500(3).gif.f527686e19da738322c39555244decac.gif

                                                             Meus tópicos         

                                                         Se ajudei você deixe seu Rep! para fortalecer a amizade ^^

                                                                              Vamos ajudar o fórum a crescer mais.

                                                                          1641206641_gif-escudo-fla-3d(1).gif.a5d3c0c24824d5272a181aa91c5eda0c.gif

                                                                                                Mengão porra! . .

                                                                     tumblr_oxm8eriUeU1sqwgnro2_400.gif.22e347b2fc58fdfd88dbf84f4bdaa1bc.gif

                                                                                ----- NPC que vende informação -----

                                                                           -----Baú Que dá Outfit se tiver Level -----

                                                                     ----- [Npc] Que vende Stones (itens) por diamonds -----

 

 

                                                                       

                       

Link para o post
Compartilhar em outros sites
Agora, Sepultura disse:

@Loouis Faz o seguinte, retira essa nova dex e deixa a antiga, me passa teu pokedex da actions, newpokedex do creaturescripts, pokedex da talkactions, catchsystem.lua da lib,  pokedex system da lib e seu some functions da lib.  

Pokedex.lua/Actions

 

Citar

local function checkDex(cid)
local unlock = 0
for i = 1, #oldpokedex do
        if oldpokedex and oldpokedex[1] and getPlayerInfoAboutPokemon(cid, oldpokedex[1]) and getPlayerInfoAboutPokemon(cid, oldpokedex[1]).dex then
            unlock = unlock + 1
        end
    end
return unlock
end
local rate = 20
 
function onUse(cid, item, fromPos, item2, toPos)
 
if not isCreature(item2.uid) then
return true
end
 
local poke = getCreatureName(item2.uid)
 
if isMonster(item2.uid) then
       local this = newpokedex[getCreatureName(item2.uid)]
  local myball = 0
  if isSummon(item2.uid) then
     myball = getPlayerSlotItem(getCreatureMaster(item2.uid), 8)
       end
       if not getPlayerInfoAboutPokemon(cid, poke).dex then
     local exp = this.level * rate
          doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce ter desbloqueado ".. getCreatureName(item2.uid).." na sua pokedex!")
     doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce ganhou "..exp.." pontos de experiencia.")
          doSendMagicEffect(getThingPos(cid), 210)
          doPlayerAddExperience(cid, exp)
          doAddPokemonInDexList(cid, poke)
       else
          doShowPokedexRegistration(cid, item2, myball)
       end
return true
end
 
if not isPlayer(item2.uid) then return true end
 
local kanto = 0
local johto = 0
                                    --alterado v1.7 \/\/
for i = 1, #oldpokedex do
if getPlayerInfoAboutPokemon(item2.uid, oldpokedex[1]).dex then
  if i <= 151 then
              kanto = kanto+1
           elseif i >= 209 then
              johto = johto+1
           end
end
end                                                      --alterado v1.6
 
local player = getRecorderPlayer(toPos, cid)
 
if cid == player then
   doPlayerSendTextMessage(cid, 27, "Você tem desbloqueado "..kanto.." kanto's e "..johto.." johto's pokémons até agora.")
        doPlayerSetVocation(cid, 9) --alterado v1.6
        openChannelDialog(cid)
end
 
return true
end

 

Pokedex System/lib

Citar

local skills = specialabilities--alterado v1.9 \/ peguem tudo!
 
function doAddPokemonInDexList(cid, poke)
if getPlayerInfoAboutPokemon(cid, poke).dex then return true end
local a = newpokedex[poke]
local b = getPlayerStorageValue(cid, a.storage)
setPlayerStorageValue(cid, a.storage, b.." dex,")
end
 
function getPokemonEvolutionDescription(name, next)
local kev = poevo[name]
local stt = {}
if isInArray(specialevo, name) then
 if name == "Poliwhirl" then
if next then
return "\nPoliwrath or Politoed, requires level 65."
end
table.insert(stt, "Evolve Stone: Water Stone and Punch Stone or Water Stone and Earth Stone\n\n")
table.insert(stt, "Evolutions:\nPoliwrath, requires level 65.\nPolitoed, requires level 65.")
 elseif name == "Gloom" then
if next then
return "\nVileplume or Bellossom, requires level 50."
end
table.insert(stt, "Evolve Stone: 2 Leaf Stone or Leaf Stone and Venom Stone\n\n")
table.insert(stt, "Evolutions:\nVileplume, requires level 50.\nBellossom, requires level 50.")
 elseif name == "Slowpoke" then
if next then
return "\nSlowbro, requires level 45.\nSlowking, requires level 100."
end
table.insert(stt, "Evolve Stone: Enigma Stone or Ancient Stone\n\n")
table.insert(stt, "Evolutions:\nSlowbro, requires level 45.\nSlowking, requires level 100.")
 elseif name == "Eevee" then
if next then
return "\nVaporeon, requires level 55.\nJolteon, requires level 55.\nFlareon, requires level 55.\nUmbreon, requires level 55.\nEspeon, requires level 55."
end
table.insert(stt, "Evolve Stone: Water Stone or Thunder Stone or Fire Stone or Darkness Stone or Enigma Stone\n\n")
table.insert(stt, "Evolutions:\nVaporeon, requires level 55.\nJolteon, requires level 55.\nFlareon, requires level 55.\nUmbreon, requires level 55.\nEspeon, requires level 55.")
 elseif name == "Tyrogue" then
if next then
return "\nHitmonlee, requires level 60.\nHitmonchan, requires level 60.\nHitmontop, requires level 60."
end
table.insert(stt, "Evolve Stone: Punch Stone\n\n")
table.insert(stt, "Evolutions:\nHitmonlee, requires level 60.\nHitmonchan, requires level 60.\nHitmontop, requires level 60.")
 end
 elseif kev then
 if next then
table.insert(stt, "\n"..kev.evolution..", requires level "..kev.level..".")
return table.concat(stt)
 end
 local id = tonumber(kev.stoneid)
 local id2 = tonumber(kev.stoneid2)
 local stone = ""
 if tonumber(kev.count) == 2 then
stone = doConvertStoneIdToString(id).." (2x)"
 else
stone = id2 == 0 and doConvertStoneIdToString(id) or doConvertStoneIdToString(id).." and "..doConvertStoneIdToString(id2)
 end
 table.insert(stt, "Evolve Stone: "..stone.."\n\n")
 table.insert(stt, "Evolutions:\n"..kev.evolution..", requeris level "..kev.level..".")
 table.insert(stt, getPokemonEvolutionDescription(kev.evolution, true))
 else
if not next then
table.insert(stt, "Evolutions:\nIt doen't evolve.")
end
 end
return table.concat(stt)
end
 
local function getMoveDexDescr(cid, name, number)
local x = movestable[name]
if not x then return "" end
 
local z = "\n"
local tables = {x.move1, x.move2, x.move3, x.move4, x.move5, x.move6, x.move7, x.move8, x.move9, x.move10, x.move11, x.move12}
local y = tables[number]
if not y then return "" end
 
if not movesinfo[y.name] then
print(""..y.name.." faltando")
return "unknown error"
end
local txt = ""..z.." "..y.name.." (move "..number.."):\n Type: "..movesinfo[y.name].t.."\n #Cooldown: "..y.cd.." seconds.\n"
return txt
end
 
--#Required level: "..y.level.."\n
--alterado v1.8
local skillcheck = {"fly", "ride", "surf", "teleport", "rock smash", "cut", "dig", "light", "blink", "control mind", "transform", "levitate_fly"}
local passivas = {
["Shock Counter"] = {"Electabuzz", "Shiny Electabuzz", "Elekid", "Raikou", tpw = "electric"},
["Flame Body"] = {"Magmar", "Magby", "Entei", tpw = "fire"},
["Counter Helix"] = {"Scyther", "Shiny Scyther", tpw = "bug"},
["Giroball"] = {"Pineco", "Forretress", tpw = "steel"},
["Counter Claw"] = {"Scizor", tpw = "bug"},
["Counter Spin"] = {"Hitmontop", "Shiny Hitmontop", tpw = "fighting"},
["Demon Kicker"] = {"Hitmonlee", "Shiny Hitmonlee", "Gardestriker Shiny Hitmonlee", tpw = "fighting"},
["Demon Puncher"] = {"Hitmonchan", "Shiny Hitmonchan", "Gardestriker Shiny Hitmonchan", tpw = "unknow"}, --alterado v1.6
["Stunning Confusion"] = {"Psyduck", "Golduck", "Wobbuffet", tpw = "psychic"},
["Groundshock"] = {"Kangaskhan", tpw = "normal"},
["Electric Charge"] = {"Pikachu", "Raichu", "Shiny Raichu", tpw = "electric"},
["Melody"] = {"Wigglytuff", tpw = "normal"},
["Dragon Fury"] = {"Dratini", "Dragonair", "Dragonite", "Shiny Dratini", "Shiny Dragonair", "Shiny Dragonite", tpw = "dragon"},
["Fury"] = {"Persian", "Raticate", "Shiny Raticate", tpw = "normal"},
["Mega Drain"] = {"Oddish", "Gloom", "Vileplume", "Kabuto", "Kabutops", "Parasect", "Tangela", "Shiny Vileplume", "Shiny Tangela", tpw = "grass"},
["Spores Reaction"] = {"Oddish", "Gloom", "Vileplume", "Shiny Vileplume", tpw = "grass"},
["Amnesia"] = {"Wooper", "Quagsire", "Swinub", "Piloswine", tpw = "psychic"},
["Zen Mind"] = {"Slowking", tpw = "psychic"},
["Mirror Coat"] = {"Wobbuffet", tpw = "psychic"},
["Lifesteal"] = {"Zubat", "Golbat", "Crobat", "Shiny Zubat", "Shiny Golbat", "Shiny Crobat", tpw = "poison"},
["Evasion"] = {"Scyther", "Scizor", "Hitmonlee", "Hitmonchan", "Hitmontop", "Tyrogue", "Shiny Scyther", "Shiny Hitmonchan", "Shiny Hitmonlee", "Shiny Hitmontop", "Ledian", "Ledyba", "Sneasel", tpw = "normal"},
["Foresight"] = {"Machamp", "Shiny Hitmonchan", "Shiny Hitmonlee", "Shiny Hitmontop", "Hitmontop", "Hitmonlee", "Hitmonchan", tpw = "fighting"},
["Levitate"] = {"Duskull", "Duskclops", "Dusknoir", "Banette", "Shuppet", "Gengar", "Haunter", "Gastly", "Misdreavus", "Weezing", "Koffing", "Unown", "Shiny Gengar", tpw = "ghost"},
 
["Bone Spin"] = {"Cubone", "Marowak", "Shiny Cubone", "Shiny Marowak", tpw = "rock"},
 
}
 
 
function doShowPokedexRegistration(cid, pokemon, ball)
local item2 = pokemon
local virtual = false
if type(pokemon) == "string" then
virtual = true
end
local myball = ball
local name = virtual and pokemon or getCreatureName(item2.uid)
 
local v = fotos[name]
local stt = {}
 
table.insert(stt, "Name: "..name.."\n")
 
if pokes[name].type2 and pokes[name].type2 ~= "no type" then
table.insert(stt, "Type: "..pokes[name].type.."/"..pokes[name].type2)
else
 table.insert(stt, "Type: "..pokes[name].type)
end
 
if virtual then
table.insert(stt, "\nRequired level: "..pokes[name].level.."\n")
else
table.insert(stt, "\nRequired level: ".. getPokemonLevel(item2.uid, true) .."\n")--alterado v1.9
end
 
table.insert(stt, "\n"..getPokemonEvolutionDescription(name).."\n")
 
table.insert(stt, "\nMoves:")
 
if name == "Ditto" or name == "Shiny Ditto" then
if virtual then
table.insert(stt, "\nIt doesn't use any moves until transformed.")
elseif getPlayerStorageValue(item2.uid, 1010) == "Ditto" or getPlayerStorageValue(item2.uid, 1010) == -1 then
table.insert(stt, "\nIt doesn't use any moves until transformed.")
for a = 1, 15 do
 table.insert(stt, getMoveDexDescr(item2.uid, getPlayerStorageValue(item2.uid, 1010), a))
end
end
else
for a = 1, 15 do
table.insert(stt, getMoveDexDescr(item2.uid, name, a))
end
end
 
for e, f in pairs(passivas) do
if isInArray(passivas[e], name) then
local tpw = passivas[e].tpw
if name == "Pineco" and passivas[e] == "Giroball" then
 tpw = "bug"
end
table.insert(stt, "\n"..e.." - passive - "..tpw)
end
end
 
table.insert(stt, "\n\nAbility:\n")
local abilityNONE = true--alterado v1.8 \/
 
for b, c in pairs(skills) do
if isInArray(skillcheck, b) then
if isInArray(c, name) then
 table.insert(stt, (b == "levitate_fly" and "Levitate" or doCorrectString(b)).."\n")
 abilityNONE = false
end
end
end
if abilityNONE then
table.insert(stt, "None")
end
 
if string.len(table.concat(stt)) > 8192 then
print("Error while making pokedex info with pokemon named "..name..".\nPokedex registration has more than 8192 letters (it has "..string.len(stt).." letters), it has been blocked to prevent fatal error.")
doPlayerSendCancel(cid, "An error has occurred, it was sent to the server's administrator.")
return true
end
 
doShowTextDialog(cid, v, table.concat(stt))
end

 

Some functions/lid

Citar

function getStringOfTaskArray(array)
   if type(array) ~= 'table' or not next(array) then return "" end
   
   local result = {}
    for _, value in ipairs(array) do
        local thing, num = (type(value[1]) == 'string' and value[1] or getItemNameById(value[1])), value[2]
        table.insert(result, (_ == 1 and "" or ", ")..num.." "..thing..(num == 1 and "" or "s"))
    end
    result[#result] = " and"..(result[#result]:sub(2,#result[#result]))
    return table.concat(result)
end

function getVitalityByMaster(cid)
if not isCreature(cid) then return 0 end
local ball = getPlayerSlotItem(cid, 8).uid
if not ball or ball <= 1 or not pokes[getItemAttribute(ball, 'poke')] then return true end
   return pokes[getItemAttribute(ball, 'poke')].vitality * (getPlayerLevel(cid) + (getItemAttribute(ball, 'boost') or 0))
end

function onPokeHealthChange(cid, zerar)
   if not isCreature(cid) then return true end
   if zerar then doPlayerSendCancel(cid, '#ph#,0,0') end
   local ball = getPlayerSlotItem(cid, 8).uid
   if not ball or ball <= 1 or not pokes[getItemAttribute(ball, 'poke')] then return true end
   
   if #getCreatureSummons(cid) >= 1 and getPlayerStorageValue(cid, 212124) <= 0 then   --alterado v1.6
      local pokemon = getCreatureSummons(cid)[1]
      local pokelife = (getCreatureHealth(pokemon) / getCreatureMaxHealth(pokemon))
      doItemSetAttribute(ball, "hp", pokelife)
   end
   
      local rd = 1 - (tonumber(getItemAttribute(ball, "hp")))
   local maxHp = HPperVITsummon * getVitalityByMaster(cid)
   local hp = maxHp -(maxHp * rd)   
   doPlayerSendCancel(cid, '#ph#,'.. math.floor(hp) ..','.. math.floor(maxHp))
end

function addPokeToPlayer(cid, pokemon, boost, gender, ball)             --alterado v1.9 \/ peguem ele todo...
local genders = {
["male"] = 4,
["female"] = 3,
[1] = 4,
[0] = 3,
[4] = 4,
[3] = 3,
}
if not isCreature(cid) then return false end

local pokemon = doCorrectString(pokemon)
if not pokes[pokemon] then return false end

   local GENDER = (gender and genders[gender]) and genders[gender] or getRandomGenderByName(pokemon)
   local btype = (ball and pokeballs[ball]) and ball or isShinyName(pokemon) and "shinynormal" or "normal"
   local happy = 250
   
   if icons[pokemon] then
      id = icons[pokemon].on
   else
      id = pokeballs[btype].on
   end

   if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then
      item = doCreateItemEx(id)
   else
      item = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, id, 1)   
   end
   if not item then return false end

   doItemSetAttribute(item, "poke", pokemon)
   doItemSetAttribute(item, "hp", 1)
   doItemSetAttribute(item, "happy", happy)
   --doItemSetAttribute(item, "-1", GENDER)
   doSetItemAttribute(item, "hands", 0)
   doItemSetAttribute(item, "description", "Contains a "..pokemon..".")
   doItemSetAttribute(item, "fakedesc", "Contains a "..pokemon..".")
   doItemSetAttribute(item, "defeated", "no")
   doItemSetAttribute(item, "ball", btype)
   if boost and tonumber(boost) and tonumber(boost) > 0 and tonumber(boost) <= 50 then
      doItemSetAttribute(item, "boost", boost)
   end
   if unique then
      doItemSetAttribute(item, "unique", getCreatureName(cid))
   end
                                                                             
   if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then
      doPlayerSendMailByName(getCreatureName(cid), item, 1)
      sendMsgToPlayer(cid, 27, "You are already holding six pokemons, so your new pokemon was sent to your depot.")
   end
   doTransformItem(item, id)
return true
end
---------------------------

function getPlayerDexList(cid)
n = 0
    if not isCreature(cid) then return n end
    for a,b in pairs(pokes) do
        if b.dex then
            if tonumber(getPlayerStorageValue(cid, b.dex)) >= 1 then
                n = n + 1
            end
        end
    end
return n
end
function getPlayerCatchList(cid)
n = 0
    if not isCreature(cid) then return n end
    for a,b in pairs(pokes) do
        if b.catch then
            if tonumber(getPlayerStorageValue(cid, b.catch.sto)) >= 1 then
                n = n + 1
            end
        end
    end
return n
end
local function getPlayerInArea(from, to)
local inarea = {}
for x=from.x, to.x do
for y=from.y, to.y do
for z=from.z, to.z do
local p = getTopCreature({x=x, y=y, z=z}).uid
if p ~= 0 and isPlayer(p) then
table.insert(inarea, p)
end
end
end
end
return inarea
end

function getPlayerInArea(fromPos, toPos) -- by jhon992
local online = getPlayersOnline()
local players = {}
for i=1, #online do
    if isInArea(getPlayerPosition(online), fromPos, toPos) then
        players[#players+1] = online
    end
end
return players
end

function getMonstersInArea(from, to)
local inarea = {}
for x=from.x, to.x do
for y=from.y, to.y do
for z=from.z, to.z do
local p = getTopCreature({x=x, y=y, z=z}).uid
if p ~= 0 and isMonster(p) then
if (isSummon(p) and not isPlayer(getCreatureMaster(p))) or not isSummon(p) then
table.insert(inarea, p)
end
end
end
end
end
return inarea
end

function unLock(ball)                                                             
if not ball or ball <= 0 then return false end
if getItemAttribute(ball, "lock") and getItemAttribute(ball, "lock") > 0 then
   local vipTime = getItemAttribute(ball, "lock")
   local timeNow = os.time()
   local days = math.ceil((vipTime - timeNow)/(24 * 60 * 60))
   if days <= 0 then
      doItemEraseAttribute(ball, "lock")    
      doItemEraseAttribute(ball, "unique")
      return true
   end
end
return false
end

function getGuildMembersOnline(GuildId)
local players = {}
for _, pid in pairs(getPlayersOnline()) do
    if getPlayerGuildId(pid) == tonumber(GuildId) then
       table.insert(players, pid)
    end
end                                                   --by Vodkart
return #players > 0 and players or false
end

function getGuildMembers(GuildId)
local players,query = {},db.getResult("SELECT `name` FROM `players` WHERE `rank_id` IN (SELECT `id` FROM `guild_ranks` WHERE `guild_id` = " .. GuildId .. ");")
if (query:getID() ~= -1) then  
   repeat
         table.insert(players,query:getDataString("name"))
   until not query:next()                           --by Vodkart
   query:free()
end
return #players > 0 and players or false
end

function isLegendaryPokemon(name)
    if name == nil then return false end
    if isInArray({"Mewtwo", "Mew", "Articuno", "Zapdos", "Moltres", "Lugia", "Ho-oh", "Celebi", "Entei", "Raikou", "Suicune", "Darkrai", "Cresselia", "Heatran", "Latios", "Latias", "Manaphy", "Phione", "Uxie", "Mesprit", "Azelf", "Regice", "Registeel", "Regirock", "Regigigas", "Groudon", "Rayquaza", "Kyogre", "Jirachi", "Deoxys", "Shaymin", "Giratina", "Dialga", "Palkia", "Arceus"}, name) then
    return true
    end
return false
end

function isFossilPokemon(name)
    if name == nil then return false end
    if isInArray({"Aerodactyl", "Kabuto", "Kabutops", "Omanyte", "Omastar"}, name) then
    return true
    end
return false
end

function isMegaPokemon(name)
    if name == nil then return false end
    if isInArray({"Mega Alakazam", "Mega Blastoise", "Mega Charizardx", "Mega Blaziken", "Mega Lucario", "Mega Gengar", "Mega Aggron", "Mega Swampert", "Mega Venusaur"}, name) then
    return true
    end
return false
end
--/////////////////////////////////////////////////////////////////////////////////---
function sendMsgToPlayer(cid, tpw, msg)      --alterado v1.7 \/\/\/
if not isCreature(cid) or not tpw or not msg then return true end
return doPlayerSendTextMessage(cid, tpw, msg)
end

function getPlayerDesc(cid, thing, TV)
if (not isCreature(cid) or not isCreature(thing)) and not TV then return "" end

local pos = getThingPos(thing)
local ocup = youAre[getPlayerGroupId(thing)]
local rank = (getPlayerStorageValue(thing, 86228) <= 0) and "a Pokemon Trainer" or lookClans[getPlayerStorageValue(thing, 86228)][getPlayerStorageValue(thing, 862281)]
local name = thing == cid and "yourself" or getCreatureName(thing)     
local art = thing == cid and "You are" or (getPlayerSex(thing) == 0 and "She is" or "He is")
   
local str = {}
table.insert(str, "You see "..name..". "..art.." ")
if youAre[getPlayerGroupId(thing)] then
   table.insert(str, (ocup).." and "..rank.." from ".. getTownName(getPlayerTown(thing))..".")       
else
   table.insert(str, (rank).." from ".. getTownName(getPlayerTown(thing))..".")
end
if getPlayerGuildId(thing) > 0 then
   table.insert(str, " "..art.." "..getPlayerGuildRank(thing).." from the "..getPlayerGuildName(thing)..".")
end
if TV then
   table.insert(str, " "..art.." watching TV.")
end
table.insert(str, ((isPlayer(cid) and youAre[getPlayerGroupId(cid)]) and "\nPosition: [X: "..pos.x.."][Y: "..pos.y.."][Z: "..pos.z.."]" or ""))

return table.concat(str)
end
-------------------------------------------------------------------------------------------------   /\/\
function getLivePokeballs(cid, container, duel)
    if not isCreature(cid) then return {} end     
    if not isContainer(container) then return {} end
    local items = {}
    ---
    local ballSlot = getPlayerSlotItem(cid, 8)
    if ballSlot.uid ~= 0 then
       for a, b in pairs (pokeballs) do
           if ballSlot.itemid == b.on or ballSlot.itemid == b.use then
              if duel and getPlayerLevel(cid) >= (pokes[getItemAttribute(ballSlot.uid, "poke")].level + getPokeballBoost(ballSlot)) then
                 table.insert(items, ballSlot.uid)                                                                      --alterado v1.8
              elseif not duel then
                 table.insert(items, ballSlot.uid)
              end
           end
       end
    end
    ---     
    if isContainer(container) and getContainerSize(container) > 0 then      
        for slot=0, (getContainerSize(container)-1) do
            local item = getContainerItem(container, slot)
                if isContainer(item.uid) then
                    local itemsbag = getPokeballsInContainer(item.uid)
                    for i=0, #itemsbag do
                        if not isInArray(items, itemsbag) then
                           table.insert(items, itemsbag)
                        end
                    end
                elseif isPokeball(item.itemid) then
                    for a, b in pairs (pokeballs) do
                        if item.itemid == b.on then
                           if duel and getPlayerLevel(cid) >= (pokes[getItemAttribute(item.uid, "poke")].level + getPokeballBoost(item)) then    
                              table.insert(items, item.uid)                                            --alterado v1.8
                           elseif not duel then
                              table.insert(items, item.uid)
                           end
                        end
                    end
                end
        end
    end
return items
end

function addItemInFreeBag(container, item, num)
if not isContainer(container) or not item then return false end                                             
if not num or num <= 0 then num = 1 end                                            --alterado v1.6.1
if getContainerSize(container) < getContainerCap(container) then
   return doAddContainerItem(container, item, num)
else
   for slot = 0, (getContainerSize(container)-1) do
       local container2 = getContainerItem(container, slot)
       if isContainer(container2.uid) and getContainerSize(container2.uid) < getContainerCap(container2.uid) then
          return doAddContainerItem(container2.uid, item, num)
       end
   end
end
return false
end
------------------------------------------------------------------------------------------------------
function pokeHaveReflect(cid)
if not isCreature(cid) then return false end
local table = getTableMove(cid, "Reflect")
if table and table.name then     --alterado v1.6
   return true
end
return false
end
------------------------------------------------------------------------------------------------------
function nextHorario(cid)
    horarioAtual = os.date("%X")
    horario = string.explode(horarioAtual, ":")
    
    for i = 1, #horas do
        horarioComparacao = horas
        horarioComp = string.explode(horarioComparacao, ":")
        ---------------
        if tonumber(horarioComp[1]) > tonumber(horario[1]) then
           return horarioComparacao                                
        elseif tonumber(horarioComp[1]) == tonumber(horario[1]) and tonumber(horario[2]) < tonumber(horarioComp[2]) then
           return horarioComparacao
        end
    end
    return horas[1]                                  
end                                                               

function getTimeDiff(timeDiff)
local dateFormat = {
{'hour', timeDiff / 60 / 60}, --6%
{'min', timeDiff / 60 % 60},
}
local out = {}                                   
for k, t in ipairs(dateFormat) do
    local v = math.floor(t[2])
    if(v > -1) then
         table.insert(out, (k < #dateFormat and '' or ' and ') .. v .. '' .. (v <= 1 and t[1] or t[1].."s"))
    end
end
if tonumber(dateFormat[1][2]) == 0 and tonumber(dateFormat[2][2]) == 0 then
   return "seconds"
end
return table.concat(out)
end

function getTimeDiff2(timeDiff)
local dateFormat = {
{'hour', timeDiff / 60 / 60}, --6%
{'min', timeDiff / 60 % 60},
{'sec', timeDiff % 60},
}
local out = {}                                  
for k, t in ipairs(dateFormat) do
    local v = math.floor(t[2])
    if(v > 0) then
         table.insert(out, (k < #dateFormat and ' ' or ' and ') .. v .. '' .. (v <= 1 and t[1] or t[1].."s"))
    end
end
return table.concat(out)
end

function showTimeDiff(timeComp)
local b = string.explode(os.date("%X"), ":")
local c = string.explode(timeComp, ":")
    ---
    local d, m, y = os.date("%d"), os.date("%m"), os.date("%Y")
    local hAtual, mAtual = tonumber(b[1]), tonumber(b[2])
    local hComp, mComp = tonumber(c[1]), tonumber(c[2])
    ---
    local t = os.time{year= y, month= m, day= d, hour= hAtual, min= mAtual}
    local t1 = os.time{year= y, month= m, day= d, hour= hComp, min= mComp}
    ---                                                                       
    comparacao = t1-t
    if hComp < hAtual then
       v = os.time{year= y, month= m, day= d, hour= 24, min= 0}
       v2 = os.time{year= y, month= m, day= d, hour= 0, min= 0}
       comparacao = (v-t)+(t1-v2)
    end
return getTimeDiff(comparacao)
end
-------------------------------------------------------------------------
function cleanCMcds(item)
if item ~= 0 then
   for c = 1, 15 do              --alterado v1.5
      local str = "cm_move"..c
      setCD(item, str, 0)
   end
end
end

function ehNPC(cid)   --alterado v1.9
return isCreature(cid) and not isPlayer(cid) and not isSummon(cid) and not isMonster(cid)
end

function ehMonstro(cid)
local eh = false
    if not isSummon(cid) and not ehNPC(cid) and not isPlayer(cid) then
        eh = true
    end
    return eh
end                                                      --alterado v1.9.1 /\

function doAppear(cid) --Faz um poke q tava invisivel voltar a ser visivel...
if not isCreature(cid) then return true end
doRemoveCondition(cid, CONDITION_INVISIBLE)
doRemoveCondition(cid, CONDITION_OUTFIT)
doCreatureSetHideHealth(cid, false)
end

function doDisapear(cid)   --Faz um pokemon ficar invisivel
if not isCreature(cid) then return true end
doCreatureAddCondition(cid, permanentinvisible)
doCreatureSetHideHealth(cid, true)
doSetCreatureOutfit(cid, {lookType = 2}, -1)
end

function hasTile(pos)    --Verifica se tem TILE na pos
pos.stackpos = 0
if getTileThingByPos(pos).itemid >= 1 then
   return true
end
return false
end

function getThingFromPosWithProtect(pos)  --Pega uma creatura numa posiçao com proteçoes
if hasTile(pos) then
   if isCreature(getRecorderCreature(pos)) then
      return getRecorderCreature(pos)
   else
      pos.stackpos = 253
      pid = getThingfromPos(pos).uid
   end
else
   pid = getThingfromPos({x=1,y=1,z=10,stackpos=253}).uid
end
return pid
end

function getTileThingWithProtect(pos)    --Pega um TILE com proteçoes
if hasTile(pos) then
pos.stackpos = 0
   pid = getTileThingByPos(pos)
else
   pid = getTileThingByPos({x=1,y=1,z=10,stackpos=0})
end
return pid
end

function canAttackOther(cid, pid)         --Function q verifica se um poke/player pode atacar outro poke/player

if not isCreature(cid) or not isCreature(pid) then return "Cant" end

local master1 = isSummon(cid) and getCreatureMaster(cid) or cid
local master2 = isSummon(pid) and getCreatureMaster(pid) or pid
   
   ----             
   if getPlayerStorageValue(master1, 6598754) >= 5 and getPlayerStorageValue(master2, 6598754) >= 5 then
      if getPlayerStorageValue(master1, 6598754) ~= getPlayerStorageValue(master2, 6598754) then
         if isDuelingAgainst(master1, master2) then   --alterado v1.8
            if isSummon(cid) and isPlayer(pid) then
               return "Cant"
            else
               return "Can"
            end
         end
      end
   end
   ----              pvp system
   if getPlayerStorageValue(master1, 6598754) >= 1 and getPlayerStorageValue(master2, 6598755) >= 1 then
      return "Can"
   end
   if getPlayerStorageValue(master1, 6598755) >= 1 and getPlayerStorageValue(master2, 6598754) >= 1 then  ---estar em times diferentes
      return "Can"
   end
   ----
   if ehMonstro(cid) and ehMonstro(pid) then
      return "Can"
   end

return "Cant"
end
   
      
function stopNow(cid, time)   
if not isCreature(cid) or not tonumber(time) or isSleeping(cid) then return true end
                                                        --alterado v1.9.1 \/
local function podeMover(cid)                         
if isPlayer(cid) then
   mayNotMove(cid, false)
elseif isCreature(cid) then
   doRegainSpeed(cid)
end
end

if isPlayer(cid) then mayNotMove(cid, true) else doChangeSpeed(cid, -getCreatureSpeed(cid)) end
addEvent(podeMover, time, cid)
end

function doReduceStatus(cid, off, def, agi)   --reduz os status
if not isCreature(cid) then return true end
local A = getOffense(cid)
local B = getDefense(cid)
local C = getSpeed(cid)

if off > 0 then
   setPlayerStorageValue(cid, 1001, A - off)
end
if def > 0 then
   setPlayerStorageValue(cid, 1002, B - def)
end
if agi > 0 then
   setPlayerStorageValue(cid, 1003, C - agi)
   if getCreatureSpeed(cid) ~= 0 then
      doRegainSpeed(cid)
   end                                              --alterado v1.5  functions arrumadas...
end
end

function doRaiseStatus(cid, off, def, agi, time)  
if not isCreature(cid) then return true end
local A = getOffense(cid)
local B = getDefense(cid)
local C = getSpeed(cid)

if off > 0 then
   setPlayerStorageValue(cid, 1001, A * off)
end
if def > 0 then
   setPlayerStorageValue(cid, 1002, B * def)
end
if agi > 0 then
   setPlayerStorageValue(cid, 1003, C + agi)
   if getCreatureSpeed(cid) ~= 0 then
      doRegainSpeed(cid)
   end
end

local D = getOffense(cid)
local E = getDefense(cid)
local F = getSpeed(cid)
---------------------------
local G = D - A
local H = E - B
local I = F - C

addEvent(doReduceStatus, time*1000, cid, G, H, I)
end


function BackTeam(cid)          
  if isCreature(cid) then
     local summon = getCreatureSummons(cid)   --alterado v1.6
     for i = 2, #summon do
         doSendMagicEffect(getThingPos(summon), 211)
         doRemoveCreature(summon)
     end
     setPlayerStorageValue(cid, 637501, -1)
  end  
end
    
function choose(...) -- by mock
    local arg = {...}
    return arg[math.random(1,#arg)]
end

function AddPremium(cid, days)
local function removerPlayer(cid)
if isCreature(cid) then
   doRemoveCreature(cid)
end
end

db.executeQuery("UPDATE `accounts` SET `premdays` = '"..days.."' WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";")
doPlayerSendTextMessage(cid,25,"Você será kickado em 5 segundos.")    
addEvent(removerPlayer, 5*1000, cid)     
return TRUE
end

function isShiny(cid)
return isCreature(cid) and string.find(getCreatureName(cid), "Shiny")  --alterado v1.9
end

function isShinyName(name)        
return tostring(name) and string.find(doCorrectString(name), "Shiny") --alterado v1.9
end

function isMega(cid)
return isCreature(cid) and string.find(getCreatureName(cid), "Mega")  --alterado v1.9
end

function isMegaName(name)        
return tostring(name) and string.find(doCorrectString(name), "Mega") --alterado v1.9
end


function doConvertTypeToStone(type, string)
local t = {
["fly"] = {heart, "heart"},
["flying"] = {heart, "heart"},
["normal"] = {heart, "heart"},
["fire"] = {fire, "fire"},
["grass"] = {leaf, "leaf"},
["leaf"] = {leaf, "leaf"},
["water"] = {water, "water"},
["poison"] = {venom, "venom"},
["venom"] = {venom, "venom"},
["electric"] = {thunder, "thunder"},
["thunder"] = {thunder, "thunder"},
["rock"] = {rock, "rock"},
["fight"] = {punch, "punch"},
["fighting"] = {punch, "punch"},
["bug"] = {coccon, "coccon"},
["dragon"] = {crystal, "crystal"},
["dark"] = {dark, "dark"},
["ghost"] = {dark, "dark"},
["ground"] = {earth, "earth"},
["earth"] = {earth, "earth"},
["psychic"] = {enigma, "enigma"},
["steel"] = {metal, "metal"},
["ancient"] = {ancient, "ancient"},
["metal"] = {metal, "metal"},
["ice"] = {ice, "ice"},
["boost"] = {boostStone, "boost"},  --alterado v1.9
}

if string then
return t[type][2]
else
return t[type][1]
end
end

function doConvertStoneIdToString(stoneID)
local t = {
[11453] = "Heart Stone",
[11441] = "Leaf Stone",
[11442] = "Water Stone",
[11443] = "Venom Stone",
[11444] = "Thunder Stone",
[11445] = "Rock Stone",
[11446] = "Punch Stone",
[11447] = "Fire Stone",               --alterado v1.6
[11448] = "Cocoon Stone",
[11449] = "Crystal Stone",
[11450] = "Darkess Stone",
[11451] = "Earth Stone",
[11452] = "Enigma Stone",
[11454] = "Ice Stone",
[12244] = "Ancient Stone",
[12232] = "Metal Stone",
[12401] = "Shiny Fire Stone",
[12402] = "Shiny Water Stone",
[12403] = "Shiny Leaf Stone",
[12404] = "Shiny Heart Stone",
[12405] = "Shiny Enigma Stone",
[12406] = "Shiny Rock Stone",
[12407] = "Shiny Venom Stone",
[12408] = "Shiny Ice Stone",
[12409] = "Shiny Thunder Stone",
[12410] = "Shiny Crystal Stone",
[12411] = "Shiny Cocoon Stone",
[12412] = "Shiny Darkness Stone",
[12413] = "Shiny Punch Stone",
[12414] = "Shiny Earth Stone",
[boostStone] = "Boost Stone",  --alterado v1.9
}
if t[stoneID] then
return t[stoneID]
else
return ""
end
end

function isStone(id)
if id >= leaf and id <= ice then
return true
end
if id == boostStone then  --alterado v1.9
return true
end
if id == 12232 or id == 12244 or id == 12244 or id == 12245 then
return true                                 
end
if (id >= sfire and id <= searth) or id == 12417 or id == 12419 then
return true
end
return false
end

function isWater(id)
return tonumber(id) and id >= 4820 and id <= 4825 --alterado v1.9
end

function getTopCorpse(position)
local pos = position
for n = 1, 255 do
    pos.stackpos = n
    local item = getTileThingByPos(pos)
    if item.itemid >= 2 and (string.find(getItemNameById(item.itemid), "fainted ") or string.find(getItemNameById(item.itemid), "defeated ")) then
       return getTileThingByPos(pos)
    end
end
return null
end

bpslot = CONST_SLOT_BACKPACK

function hasPokemon(cid)
    if not isCreature(cid) then return false end
    if getCreatureMana(cid) <= 0 then return false end
    if #getCreatureSummons(cid) >= 1 then return true end
    local item = getPlayerSlotItem(cid, CONST_SLOT_FEET)
    local bp = getPlayerSlotItem(cid, bpslot)
    for a, b in pairs (pokeballs) do
        if item.itemid == b.on or item.itemid == b.use then
        return true                              --alterado v1.4
        end
        if #getItemsInContainerById(bp.uid, b.on) >= 1 then
        return true
        end
    end
return false
end

function isNpcSummon(cid)
return isNpc(getCreatureMaster(cid))
end

function getPokemonHappinessDescription(cid)
    if not isCreature(cid) then return true end
    local str = {}
    if getPokemonGender(cid) == SEX_MALE then
        table.insert(str, "He")
    elseif getPokemonGender(cid) == SEX_FEMALE then
        table.insert(str, "She")
    else
        table.insert(str, "It")
    end
    local h = getPlayerStorageValue(cid, 1008)
    if h >= tonumber(getConfigValue('PokemonStageVeryHappy')) then
        table.insert(str, " is very happy with you!")
    elseif h >= tonumber(getConfigValue('PokemonStageHappy')) then
        table.insert(str, " is happy.")
    elseif h >= tonumber(getConfigValue('PokemonStageOK')) then
        table.insert(str, " is unhappy.")
    elseif h >= tonumber(getConfigValue('PokemonStageSad')) then
        table.insert(str, " is sad.")
    elseif h >= tonumber(getConfigValue('PokemonStageMad')) then
        table.insert(str, " is mad.")
    else
        table.insert(str, " is very mad at you!")
    end
return table.concat(str)
end

function doSetItemAttribute(item, key, value)
doItemSetAttribute(item, key, value)
end

function deTransform(cid, check)
    if not isCreature(cid) then return true end

    local m = getCreatureMaster(cid)
    local p = getPlayerSlotItem(m, 8)

    if getItemAttribute(p.uid, "transTurn") ~= check then return true end

    setPlayerStorageValue(cid, 1010, getCreatureName(cid) == "Ditto" and "Ditto" or "Shiny Ditto")        --edited
    doRemoveCondition(cid, CONDITION_OUTFIT)
    doSendMagicEffect(getThingPos(cid), 184)
    doCreatureSay(cid, "DITTO!", TALKTYPE_MONSTER)
    doItemSetAttribute(p.uid, "transBegin", 0)
    doItemSetAttribute(p.uid, "transLeft", 0)
    doItemEraseAttribute(p.uid, "transName")
    adjustStatus(cid, p.uid, true, true, true)
end

function isTransformed(cid)
return isCreature(cid) and not isInArray({-1, "Ditto", "Shiny Ditto"}, getPlayerStorageValue(cid, 1010))  --alterado v1.9
end

function doSendFlareEffect(pos)
    local random = {28, 29, 79}
    doSendMagicEffect(pos, random[math.random(1, 3)])
end

function isDay()
    local a = getWorldTime()
    if a >= 360 and a < 1080 then
    return true
    end
return false
end

function doPlayerSendTextWindow(cid, p1, p2)
    if not isCreature(cid) then return true end
    local item = 460
    local text = ""
    if type(p1) == "string" then
        doShowTextDialog(cid, item, p1)
    else
        doShowTextDialog(cid, p1, p2)
    end
end

function getClockString(tw)
    local a = getWorldTime()
    local b = a / 60
    local hours = math.floor(b)
    local minut = a - (60 * hours)

    if not tw then
        if hours < 10 then
            hours = "0"..hours..""
        end
        if minut < 10 then
            minut = "0"..minut..""
        end
    return hours..":"..minut
    else
        local sm = "a.m"
        if hours >= 12 then
            hours = hours - 12
            sm = "p.m"
        end
        if hours < 10 then
            hours = "0"..hours..""
        end
        if minut < 10 then
            minut = "0"..minut..""
        end
    return hours..":"..minut.." "..sm
    end
end

function doCorrectPokemonName(poke)
return doCorrectString(poke)
end

function doCorrectString(str)
local name = str:explode(" ")  --alterado v1.9
local final = {}
for _, s in ipairs(name) do
    table.insert(final, s:sub(1, 1):upper()..s:sub(2, #s):lower())
end
return table.concat(final, (name[2] and " " or ""))
end   

function getHappinessRate(cid)
    if not isCreature(cid) then return 1 end
    local a = getPlayerStorageValue(cid, 1008)
        if a == -1 then return 1 end
    if a >= getConfigValue('PokemonStageVeryHappy') then
        return happinessRate[5].rate
    elseif a >= getConfigValue('PokemonStageHappy') then
        return happinessRate[4].rate
    elseif a >= getConfigValue('PokemonStageOK') then
        return happinessRate[3].rate
    elseif a >= getConfigValue('PokemonStageSad') then
        return happinessRate[2].rate
    else
        return happinessRate[1].rate
    end
return 1
end

function doBodyPush(cid, target, go, pos)
    if not isCreature(cid) or not isCreature(target) then
        doRegainSpeed(cid)
        doRegainSpeed(target)
    return true
    end
        if go then
            local a = getThingPos(cid)
            doChangeSpeed(cid, -getCreatureSpeed(cid))
                if not isPlayer(target) then
                    doChangeSpeed(target, -getCreatureSpeed(target))
                end
            doChangeSpeed(cid, 800)
            doTeleportThing(cid, getThingPos(target))
            doChangeSpeed(cid, -800)
            addEvent(doBodyPush, 350, cid, target, false, a)
        else
            doChangeSpeed(cid, 800)
            doTeleportThing(cid, pos)
            doRegainSpeed(cid)
            doRegainSpeed(target)
        end
end

function doReturnPokemon(cid, pokemon, pokeball, effect, hideeffects, blockevo)

    --////////////////////////////////////////////////////////////////////////////////////////--
    checkDuel(cid)                                                                      --alterado v1.6 duel system
    --////////////////////////////////////////////////////////////////////////////////////////--
    if getPlayerStorageValue(cid, 52480) >= 1 and getPlayerStorageValue(cid, 52484) ~= 10 then
       return sendMsgToPlayer(cid, 27, "You can't do that while the duel don't begins!")        --alterado v1.8
    end
    --////////////////////////////////////////////////////////////////////////////////////////--
    
    if #getCreatureSummons(cid) > 1 and getPlayerStorageValue(cid, 212124) <= 0 then     --alterado v1.6
       if getPlayerStorageValue(cid, 637501) == -2 or getPlayerStorageValue(cid, 637501) >= 1 then  
          BackTeam(cid)       
       end
    end
    -----------------
    local edit = true

    if not pokeball then
        pokeball = getPlayerSlotItem(cid, 8)
    end

    if blockevo then
        edit = false
        doPlayerSendCancel(cid, "Your pokemon couldn't evolve due to server mistakes, please wait until we fix the problem.")
    end

    local happy = getPlayerStorageValue(pokemon, 1008)
    local hunger = getPlayerStorageValue(pokemon, 1009)
    local pokelife = (getCreatureHealth(pokemon) / getCreatureMaxHealth(pokemon))

    if edit then
        doItemSetAttribute(pokeball.uid, "happy", happy)
        doItemSetAttribute(pokeball.uid, "hunger", hunger)
        doItemSetAttribute(pokeball.uid, "hp", pokelife)
    end

--    if getCreatureName(pokemon) == "Ditto" then
--        if isTransformed(pokemon) then
    --        local left = getItemAttribute(pokeball.uid, "transLeft") - (os.clock() - getItemAttribute(pokeball.uid, "transBegin"))
    --        doItemSetAttribute(pokeball.uid, "transLeft", left)
    --    end
--    end

    if hideeffects then
        doRemoveCreature(pokemon)
    return true
    end

    local pokename = getPokeName(pokemon)

    local mbk = gobackmsgs[math.random(1, #gobackmsgs)].back:gsub("doka", pokename)

    if getCreatureCondition(cid, CONDITION_INFIGHT) then
        if isCreature(getCreatureTarget(cid)) then
            doItemSetAttribute(pokeball.uid, "happy", happy - 5)
        else
            doItemSetAttribute(pokeball.uid, "happy", happy - 2)
        end
    end

    doTransformItem(pokeball.uid, pokeball.itemid-1)
    doCreatureSay(cid, mbk, TALKTYPE_SAY)

    doSendMagicEffect(getCreaturePosition(pokemon), effect)

    doRemoveCreature(pokemon)

    unLock(pokeball.uid) --alterado v1.8
    
    if useOTClient then
       doPlayerSendCancel(cid, '12//,hide')  --alterado v1.7
    end
    
    if useKpdoDlls then
        doUpdateMoves(cid)
    end

end

local EFFECTS = {
    --[OutfitID] = {Effect}
    ["Magmar"] = 35,                --alterado v1.5
    ["Shiny Magmar"] = 35,
    ["Magby"] = 35,
    ["Jynx"] = 17,   
    ["Smoochum"] = 17,
    ["Shiny Jynx"] = 17,    
    ["Piloswine"] = 205,  --alterado v1.8
    ["Swinub"] = 205,
    ["Stantler"] = 205,
    ["Shiny Stantler"] = 205,
}

function doGoPokemon(cid, item)

    if getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 17001) >= 1 or getPlayerStorageValue(cid, 63215) >= 1 then
    return true
    end
---------------------------------------------------------------
local ballName = getItemAttribute(item.uid, "poke")

   btype = getPokeballType(item.itemid)                   

    local effect = pokeballs[btype].effect
        if not effect then
            effect = 21
        end
-----------------------------------------------------------------
    if item.uid ~= getPlayerSlotItem(cid, CONST_SLOT_FEET).uid then
        doPlayerSendCancel(cid, "You must put your pokeball in the correct place!")
    return TRUE
    end

    local thishp = getItemAttribute(item.uid, "hp")

    if thishp <= 0 then
        if isInArray(pokeballs[btype].all, item.itemid) then
            doTransformItem(item.uid, pokeballs[btype].off)
            doItemSetAttribute(item.uid, "hp", 0)
            doPlayerSendCancel(cid, "This pokemon is fainted.")
            return true
        end
    end

    local pokemon = getItemAttribute(item.uid, "poke")

    if not pokes[pokemon] then
    return true
    end

----------------------- Sistema de nao poder carregar mais que 3 pokes lvl baixo e + q 1 poke de lvl medio/alto ---------------------------------
if not isInArray({5, 6}, getPlayerGroupId(cid)) then
   local balls = getPokeballsInContainer(getPlayerSlotItem(cid, 3).uid)      --alterado v1.9 \/
   local low = {}
   local lowPokes = {"Rattata", "Caterpie", "Weedle", "Oddish", "Pidgey", "Paras", "Poliwag", "Bellsprout", "Magikarp", "Hoppip", "Sunkern"}
   if #balls >= 1 then
      for _, uid in ipairs(balls) do
          local nome = getItemAttribute(uid, "poke")
          if not isInArray(lowPokes, pokemon) and nome == pokemon then
             return doPlayerSendTextMessage(cid, 27, "Sorry, but you can't carry two pokemons equals!")
          else
             if nome == pokemon then
                table.insert(low, nome)
             end
          end
      end
   end
if #low >= 3 then
   return doPlayerSendTextMessage(cid, 27, "Sorry, but you can't carry more than three pokemons equals of low level!")
end   
end
---------------------------------------------------------------------------------------------------------------------------------------------------

    local x = pokes[pokemon]
    local boosts = getItemAttribute(item.uid, "boost") or 0

    if getPlayerLevel(cid) < (x.level + boosts) then   --alterado v1.8 \/
    doPlayerSendCancel(cid, "You need level "..(x.level + boosts).." to use this pokemon.")
    return true
    end
    
    --------------------------------------------------------------------------------------
    shinysClan = {
    ["Shiny Fearow"] = {4, "Wingeon"},
    ["Shiny Flareon"] = {1, "Volcanic"},
    ["Shiny Vaporeon"] = {2, "Seavel"},
    ["Shiny Jolteon"] = {9, "Raibolt"},
    ["Shiny Hypno"] = {7, "Psycraft"},
    ["Shiny Golem"] = {3, "Orebound"},         
    ["Shiny Vileplume"] = {8, "Naturia"},
    ["Shiny Nidoking"] = {5, "Malefic"},
    ["Shiny Hitmontop"] = {6, "Gardestrike"},   
    }
    
    if shinysClan[pokemon] and (getPlayerGroupId(cid) < 4 or getPlayerGroupId(cid) > 6) then --alterado v1.9
       if getPlayerStorageValue(cid, 86228) ~= shinysClan[pokemon][1] then
          doPlayerSendCancel(cid, "You need be a member of the clan "..shinysClan[pokemon][2].." to use this pokemon!")
          return true   
       elseif getPlayerStorageValue(cid, 862281) ~= 5 then
          doPlayerSendCancel(cid, "You need be atleast rank 5 to use this pokemon!")
          return true
       end
    end
    --------------------------------------------------------------------------------------

    doSummonMonster(cid, pokemon)

    local pk = getCreatureSummons(cid)[1]
    if not isCreature(pk) then return true end
    
    ------------------------passiva hitmonchan------------------------------
    if isSummon(pk) then                                                  --alterado v1.8 \/
       if pokemon == "Shiny Hitmonchan" or pokemon == "Hitmonchan" then
          if not getItemAttribute(item.uid, "hands") then
             doSetItemAttribute(item.uid, "hands", 0)
          end
          local hands = getItemAttribute(item.uid, "hands")
          doSetCreatureOutfit(pk, {lookType = hitmonchans[pokemon][hands].out}, -1)
       end
    end
    -------------------------------------------------------------------------
    ---------movement magmar, jynx-------------
    if EFFECTS[getCreatureName(pk)] then     
       markPosEff(pk, getThingPos(pk))
       sendMovementEffect(pk, EFFECTS[getCreatureName(pk)], getThingPos(pk))   
    end
    --------------------------------------------------------------------------  

    if getCreatureName(pk) == "Ditto" then

        local left = getItemAttribute(item.uid, "transLeft")
        local name = getItemAttribute(item.uid, "transName")

        if left and left > 0 then
            setPlayerStorageValue(pk, 1010, name)
            doSetCreatureOutfit(pk, {lookType = getItemAttribute(item.uid, "transOutfit")}, -1)
            addEvent(deTransform, left * 1000, pk, getItemAttribute(item.uid, "transTurn"))
            doItemSetAttribute(item.uid, "transBegin", os.clock())
        else
            setPlayerStorageValue(pk, 1010, "Ditto")
        end
    end

    if isGhostPokemon(pk) then doTeleportThing(pk, getPosByDir(getThingPos(cid), math.random(0, 7)), false) end

    doCreatureSetLookDir(pk, 2)

    adjustStatus(pk, item.uid, true, true, true)
    doAddPokemonInOwnList(cid, pokemon)

    doTransformItem(item.uid, item.itemid+1)

    local pokename = getPokeName(pk) --alterado v1.7

    local mgo = gobackmsgs[math.random(1, #gobackmsgs)].go:gsub("doka", pokename)
    doCreatureSay(cid, mgo, TALKTYPE_SAY)

    doSendMagicEffect(getCreaturePosition(pk), effect)

    unLock(item.uid) --alterado v1.8

    if useKpdoDlls then
        doUpdateMoves(cid)
    end
end

function doRegainSpeed(cid)              --alterado v1.9 \/
if not isCreature(cid) then return true end

   local speed = PlayerSpeed
   if isMonster(cid) then
      speed = getSpeed(cid)
   elseif isPlayer(cid) and isInArray({4, 5, 6}, getPlayerGroupId(cid)) then
      speed = 200*getPlayerGroupId(cid)
   end
   
   doChangeSpeed(cid, -getCreatureSpeed(cid))
   if getCreatureCondition(cid, CONDITION_PARALYZE) == true then
      doRemoveCondition(cid, CONDITION_PARALYZE)
      addEvent(doAddCondition, 10, cid, paralizeArea2)             
   end
    
doChangeSpeed(cid, speed)
return speed
end

function isPosEqualPos(pos1, pos2, checkstackpos)
    if pos1.x ~= pos2.x or pos1.y ~= pos2.y and pos1.z ~= pos2.z then
    return false
    end
    if checkstackpos and pos1.stackpos and pos2.stackpos and pos1.stackpos ~= pos2.stackpos then
    return false
    end
return true
end

function getRandomGenderByName(name)
local rate = newpokedex[name]
    if not rate then return 0 end
    rate = rate.gender
    if rate == 0 then
        gender = 3
    elseif rate == 1000 then
        gender = 4
    elseif rate == -1 then
        gender = 0
    elseif math.random(1, 1000) <= rate then
        gender = 4
    else
        gender = 3
    end
return gender
end

function getRecorderPlayer(pos, cid)
    local ret = 0
    if cid and isPosEqual(getThingPos(cid), pos) then   --alterado v1.9
       return cid
    end
    local s = {}
    s.x = pos.x
    s.y = pos.y
    s.z = pos.z
        for a = 0, 255 do
            s.stackpos = a
            local b = getTileThingByPos(s).uid
            if b > 1 and isPlayer(b) and getCreatureOutfit(b).lookType ~= 814 then
                ret = b
            end
        end
return ret
end

function getRecorderCreature(pos, cid)
    local ret = 0
    if cid and isPosEqual(getThingPos(cid), pos) then   --alterado v1.9
       return cid
    end
    local s = {}
    s.x = pos.x
    s.y = pos.y
    s.z = pos.z
        for a = 0, 255 do
            s.stackpos = a
            local b = getTileThingByPos(s).uid
            if b > 1 and isCreature(b) and getCreatureOutfit(b).lookType ~= 814 then
                ret = b
            end
        end
return ret
end

function doCreatureSetOutfit(cid, outfit, time)
    doSetCreatureOutfit(cid, outfit, time)
end

function doMagicalFlower(cid, away)
    if not isCreature(cid) then return true end
    for x = -3, 3 do
        for y = -3, 3 do
        local a = getThingPos(cid)
        a.x = a.x + x
        a.y = a.y + y
            if away then
                doSendDistanceShoot(a, getThingPos(cid), 21)
            else
                doSendDistanceShoot(getThingPos(cid), a, 21)
            end
        end
    end
end        

function isItemPokeball(item)         --alterado v1.9 \/
if not item then return false end
for a, b in pairs (pokeballs) do
    if isInArray(b.all, item) then return true end
    if item >= 12861 and item <= 13781 then
    return true
    end
    if item >= 13797 and item <= 13823 then
    return true
    end
        if item >= 10975 and item <= 10977 then
        return true
    end
    if item >= 13836 and item <= 13850 then
    return true
    end
    if item >= 13851 and item <= 13856 then
    return true
    end
    if item >= 13859 and item <= 13861 then
    return true
    end
    if item >= 13902 and item <= 13904 then
    return true
    end
    if item >= 13919 and item <= 13930 then
    return true
    end
end
return false
end

function isPokeball(item)
if not item then return false end
for a, b in pairs (pokeballs) do
    if isInArray(b.all, item) then return true end
    if item >= 12861 and item <= 13781 then
    return true
    end
    if item >= 13797 and item <= 13823 then
    return true
    end
        if item >= 10975 and item <= 10977 then
        return true
    end
    if item >= 13836 and item <= 13856 then
    return true
    end
end
return false
end
function getPokeballType(id)
    for a, b in pairs (pokeballs) do
        if isInArray(b.all, id) then
            return a
        end
    end
return "none"
end

randomdiagonaldir = {
[NORTHEAST] = {NORTH, EAST},
[SOUTHEAST] = {SOUTH, EAST},
[NORTHWEST] = {NORTH, WEST},
[SOUTHWEST] = {SOUTH, WEST}}

function doFaceOpposite(cid)
local a = getCreatureLookDir(cid)
local d = {
[NORTH] = SOUTH,
[SOUTH] = NORTH,
[EAST] = WEST,
[WEST] = EAST,
[NORTHEAST] = SOUTHWEST,
[NORTHWEST] = SOUTHEAST,
[SOUTHEAST] = NORTHWEST,
[SOUTHWEST] = NORTHEAST}
doCreatureSetLookDir(cid, d[a])
end

function doFaceRandom(cid)
local a = getCreatureLookDir(cid)
local d = {
[NORTH] = {SOUTH, WEST, EAST},
[SOUTH] = {NORTH, WEST, EAST},
[WEST] = {SOUTH, NORTH, EAST},
[EAST] = {SOUTH, WEST, NORTH}}
doChangeSpeed(cid, 1)
doCreatureSetLookDir(cid, d[a][math.random(1, 3)])
doChangeSpeed(cid, -1)
end

function getFaceOpposite(dir)
local d = {
[NORTH] = SOUTH,
[SOUTH] = NORTH,
[EAST] = WEST,
[WEST] = EAST,
[NORTHEAST] = SOUTHWEST,
[NORTHWEST] = SOUTHEAST,
[SOUTHEAST] = NORTHWEST,
[SOUTHWEST] = NORTHEAST}
return d[dir]
end

function getResistance(cid, combat)
    if isPlayer(cid) then return false end
local poketype1 = pokes[getCreatureName(cid)].type
local poketype2 = pokes[getCreatureName(cid)].type2
local multiplier = 1
    if effectiveness[combat].super and isInArray(effectiveness[combat].super, poketype1) then
        multiplier = multiplier * 2
    end
    if poketype2 and effectiveness[combat].super and isInArray(effectiveness[combat].super, poketype2) then
        multiplier = multiplier * 2
    end
    if effectiveness[combat].weak and isInArray(effectiveness[combat].weak, poketype1) then
        multiplier = multiplier * 0.5
    end
    if poketype2 and effectiveness[combat].weak and isInArray(effectiveness[combat].weak, poketype2) then
        multiplier = multiplier * 0.5
    end
    if effectiveness[combat].non and isInArray(effectiveness[combat].non, poketype1) then
        multiplier = multiplier * 0
    end
    if poketype2 and effectiveness[combat].non and isInArray(effectiveness[combat].non, poketype2) then
        multiplier = multiplier * 0
    end

    if multiplier == 0.25 then
        multiplier = 0.5
    elseif multiplier == 4 then
        multiplier = 2
    end

return multiplier
end

function getCreatureDirectionToTarget(cid, target, ranged)
    if not isCreature(cid) then return true end
    if not isCreature(target) then return getCreatureLookDir(cid) end
    local dirs = {
    [NORTHEAST] = {NORTH, EAST},
    [SOUTHEAST] = {SOUTH, EAST},
    [NORTHWEST] = {NORTH, WEST},
    [SOUTHWEST] = {SOUTH, WEST}}
    local x = getDirectionTo(getThingPos(cid), getThingPos(target), false)
        if x <= 3 then return x
        else
            local xdistance = math.abs(getThingPos(cid).x - getThingPos(target).x)
            local ydistance = math.abs(getThingPos(cid).y - getThingPos(target).y)
                if xdistance > ydistance then
                    return dirs[x][2]
                elseif ydistance > xdistance then
                    return dirs[x][1]
                elseif isInArray(dirs[x], getCreatureLookDir(cid)) then
                    return getCreatureLookDir(cid)
                else
                    return dirs[x][math.random(1, 2)]
                end
        end
end

function getSomeoneDescription(cid)
    if isPlayer(cid) then return getPlayerNameDescription(cid) end
return getMonsterInfo(getCreatureName(cid)).description
end
    

function isGhostPokemon(cid)
if not isCreature(cid) then return false end
local ghosts = {"Gastly", "Haunter", "Gengar", "Shiny Gengar", "Misdreavus", "Shiny Abra"}
return isInArray(ghosts, getCreatureName(cid))
end

function updateGhostWalk(cid)
    if not isCreature(cid) then return false end
    local pos = getThingPos(cid)
    pos.x = pos.x + 1
    pos.y = pos.y + 1
    local ret = getThingPos(cid)
    doTeleportThing(cid, pos, false)
    doTeleportThing(cid, ret, false)
return true
end

function doRemoveElementFromTable(t, e)
    local ret = {}
    for a = 1, #t do
        if t[a] ~= e then
        table.insert(ret, t[a])
        end
    end
return ret
end

function doFaceCreature(sid, pos)
if not isCreature(sid) then return true end
    if getThingPos(sid).x == pos.x and getThingPos(sid).y == pos.y then return true end
    local ret = 0

    local ld = getCreatureLookDir(sid)
    local dir = getDirectionTo(getThingPos(sid), pos)
    local al = {
    [NORTHEAST] = {NORTH, EAST},
    [NORTHWEST] = {NORTH, WEST},
    [SOUTHEAST] = {SOUTH, EAST},
    [SOUTHWEST] = {SOUTH, WEST}}

    if dir >= 4 and isInArray(al[dir], ld) then return true end

    doChangeSpeed(sid, 1)
        if dir == 4 then
            ret = math.random(2, 3)
        elseif dir == 5 then
            ret = math.random(1, 2)
        elseif dir == 6 then
            local dirs = {0, 3}
            ret = dirs[math.random(1, 2)]
        elseif dir == 7 then
            ret = math.random(0, 1)
        else
            ret = getDirectionTo(getThingPos(sid), pos)
        end
doCreatureSetLookDir(sid, ret)
doChangeSpeed(sid, -1)
return true
end

function doCreatureAddCondition(cid, condition)
if not isCreature(cid) then return true end
doAddCondition(cid, condition)
end

function doCreatureRemoveCondition(cid, condition)
if not isCreature(cid) then return true end
doRemoveCondition(cid, condition)
end

function setCD(item, tipo, tempo)

    if not tempo or not tonumber(tempo) then
        doItemEraseAttribute(item, tipo)
    return true
    end

    doItemSetAttribute(item, tipo, "cd:"..(tempo + os.time()).."")
return tempo + os.time()
end

function getCD(item, tipo, limite)

    if not getItemAttribute(item, tipo) then
    return 0
    end

    local string = getItemAttribute(item, tipo):gsub("cd:", "")
    local number = tonumber(string) - os.time()

    if number <= 0 then
    return 0
    end

    if limite and limite < number then
        return 0
    end

return number
end

function doSendMoveEffect(cid, target, effect)
if not isCreature(cid) or not isCreature(target) then return true end
doSendDistanceShoot(getThingPos(cid), getThingPos(target), effect)
return true
end

function doSetItemActionId(uid, actionid)
doItemSetAttribute(uid, "aid", actionid)
return true
end

function threeNumbers(number)
    if number <= 9 then
    return "00"..number..""
    elseif number <= 99 then
    return "0"..number..""
    end
return ""..number..""
end

function isBr(cid)
if getPlayerStorageValue(cid, 105505) ~= -1 then
return true
end
return false
end

function isBeingUsed(ball)            
if not ball then return false end
for a, b in pairs (pokeballs) do           --alterado v1.9
    if b.use == ball then return true end
end
return false
end

function doRemoveTile(pos)-- Script by mock
pos.stackpos = 0
local sqm = getTileThingByPos(pos)
doRemoveItem(sqm.uid,1)
end

function doCreateTile(id,pos) -- By mock
doAreaCombatHealth(0,0,pos,0,0,0,CONST_ME_NONE)
doCreateItem(id,1,pos)
end

function hasSqm(pos)
local f = getTileThingByPos(pos)
if f.itemid ~= 0 and f.itemid ~= 1 then
return true
end
return false
end

function getPosDirs(p, dir) -- By MatheusMkalo
return dir == 1 and {x=p.x-1, y=p.y, z=p.z} or dir == 2 and {x=p.x-1, y=p.y+1, z=p.z} or dir == 3 and {x=p.x, y=p.y+1, z=p.z} or dir == 4 and {x=p.x+1, y=p.y+1, z=p.z} or dir == 5 and {x=p.x+1, y=p.y, z=p.z} or dir == 6 and {x=p.x+1, y=p.y-1, z=p.z} or dir == 7 and {x=p.x, y=p.y-1, z=p.z} or dir == 8 and {x=p.x-1, y=p.y-1, z=p.z}
end

function canWalkOnPos(pos, creature, pz, water, sqm, proj)
if not pos then return false end
if not pos.x then return false end
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid <= 1 and sqm then return false end
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 919 then return false end
if isInArray({4820, 4821, 4822, 4823, 4824, 4825}, getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end
if getTopCreature(pos).uid > 0 and creature then return false end
if getTileInfo(pos).protection and pz then return false end
    local n = not proj and 3 or 2                                    --alterado v1.6
    for i = 0, 255 do
        pos.stackpos = i                           
        local tile = getTileThingByPos(pos)        
        if tile.itemid ~= 0 and i ~= 253 and not isCreature(tile.uid) then     --edited
            if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                return false
            end
        end
    end   
return true
end

function canWalkOnPos2(pos, creature, pz, water, sqm, proj)     --alterado v1.6
if not pos then return false end
if not pos.x then return false end
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid <= 1 and sqm then return false end
if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 919 then return false end
if isInArray({4820, 4821, 4822, 4823, 4824, 4825}, getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end
if getTopCreature(pos).uid > 0 and creature then return false end
if getTileInfo(pos).protection and pz then return false end
    --[[local n = not proj and 3 or 2
    for i = 0, 255 do
        pos.stackpos = i                           --edited pra retirar um bug.. ;x
        local tile = getTileThingByPos(pos)        
        if tile.itemid ~= 0 and i ~= 253 and not isCreature(tile.uid) then     --edited
            if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                return false
            end
        end
    end ]]  
return true
end

function getFreeTile(pos, cid)
    if canWalkOnPos(pos, true, false, true, true, false) then
        return pos
    end
    local positions = {}
    for a = 0, 7 do
        if canWalkOnPos(getPosByDir(pos, a), true, false, true, true, false) then
        table.insert(positions, pos)
        end
    end
    if #positions >= 1 then
        if isCreature(cid) then
            local range = 1000
            local ret = getThingPos(cid)
            for b = 1, #positions do
                if getDistanceBetween(getThingPos(cid), positions) < range then
                    ret = positions
                    range = getDistanceBetween(getThingPos(cid), positions)
                end
            end
            return ret
        else
            return positions[math.random(#positions)]
        end
    end
return getThingPos(cid)
end

function isWalkable(pos, creature, proj, pz, water)-- by Nord
    if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
    if isWater(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water 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 isPlayerSummon(cid, uid)
return getCreatureMaster(uid) == cid  --alterado v1.9
end

function isSummon(sid)
return isCreature(sid) and getCreatureMaster(sid) ~= sid and isPlayer(getCreatureMaster(sid))   --alterado v1.9
end

function getItemsInContainerById(container, itemid) -- Function By Kydrai
local items = {}
if isContainer(container) and getContainerSize(container) > 0 then
   for slot=0, (getContainerSize(container)-1) do
       local item = getContainerItem(container, slot)
       if isContainer(item.uid) then
          local itemsbag = getItemsInContainerById(item.uid, itemid)
          for i=0, #itemsbag do
              table.insert(items, itemsbag)
          end
       else
          if itemid == item.itemid then
             table.insert(items, item.uid)
          end
       end
   end
end
return items
end

function getPokeballsInContainer(container) -- Function By Kydrai
    if not isContainer(container) then return {} end
    local items = {}
    if isContainer(container) and getContainerSize(container) > 0 then
        for slot=0, (getContainerSize(container)-1) do
            local item = getContainerItem(container, slot)
                if isContainer(item.uid) then
                    local itemsbag = getPokeballsInContainer(item.uid)
                    for i=0, #itemsbag do
                        table.insert(items, itemsbag)
                    end
                elseif isPokeball(item.itemid) then
                    table.insert(items, item.uid)
                end
        end
    end
return items
end

function getItensUniquesInContainer(container)    --alterado v1.6
if not isContainer(container) then return {} end
local items = {}
if isContainer(container) and getContainerSize(container) > 0 then
   for slot=0, (getContainerSize(container)-1) do
       local item = getContainerItem(container, slot)
       if isContainer(item.uid) then
          local itemsbag = getItensUniquesInContainer(item.uid)
          for i=0, #itemsbag do
              table.insert(items, itemsbag)
          end
       elseif getItemAttribute(item.uid, "unique") then
          table.insert(items, item)
       end
   end
end
return items
end

function hasSpaceInContainer(container)                --alterado v1.6
if not isContainer(container) then return false end
if getContainerSize(container) < getContainerCap(container) then return true end

for slot = 0, (getContainerSize(container)-1) do
    local item = getContainerItem(container, slot)
    if isContainer(item.uid) then
       if hasSpaceInContainer(item.uid) then
          return true
       end
    end
end
return false
end

function doPlayerAddItemStacking(cid, itemid, quant) -- by mkalo
local item = getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, itemid)
local piles = 0
if #item > 0 then
   for i,x in pairs(item) do
       if getThing(x).type < 100 then
          local it = getThing(x)
          doTransformItem(it.uid, itemid, it.type+quant)
          if it.type+quant > 100 then
             doPlayerAddItem(cid, itemid, it.type+quant-100)
          end
       else
          piles = piles+1
       end
   end
else
   return doPlayerAddItem(cid, itemid, quant)
end
if piles == #item then
   doPlayerAddItem(cid, itemid, quant)
end
end

function getPlayerInArea(fromPos, toPos) -- by jhon992
local online = getPlayersOnline()
local players = {}
for i=1, #online do
    if isInArea(getPlayerPosition(online), fromPos, toPos) then
        players[#players+1] = online
    end
end
return players
end
function isPlayerOnline(uid)
    return isInArray(getPlayersOnline(), uid)
end

function getMonstersInArea(from, to)
local inarea = {}
for x=from.x, to.x do
for y=from.y, to.y do
for z=from.z, to.z do
local p = getTopCreature({x=x, y=y, z=z}).uid
if p ~= 0 and isMonster(p) then
if (isSummon(p) and not isPlayer(getCreatureMaster(p))) or not isSummon(p) then
table.insert(inarea, p)
end
end
end
end
end
return inarea
end

function doPlayerRemoveEasterPoints(cid, count)
    if not isCreature(cid) then return false end
    points = getEasterPoints(cid)
    if (points - count) <= 0 then return false end
    if (points - count) > 0 then
        setPlayerStorageValue(cid, 14264, (points - count))
        return true
    end
return false
end
    

function doTruant(cid)
    if not isCreature(cid) then return false end
    doRaiseStatus(cid, 0, 1.5, 0, 5)
    doSleep2(cid, 5, 0, true)
    addEvent(doTruant, 15000, cid)
end

function getEasterPoints(cid)
    if not isCreature(cid) then return 0 end
    if getPlayerStorageValue(cid, 14264) <= 0 then return 0 end
return getPlayerStorageValue(cid, 14264)
end

function doGiveEasterPoints(cid, points)
    if not isCreature(cid) then return false end
    setPlayerStorageValue(cid, 14264, getEasterPoints(cid) + points)
return true
end

function getItensTypeInContainer(container)
    if not isContainer(container) then return {} end
    local items = {}
    if isContainer(container) and getContainerSize(container) > 0 then
        for slot=0, (getContainerSize(container)-1) do
            local item = getContainerItem(container, slot)
                if isContainer(item.uid) then
                    local itemsbag = getItensInContainer(item.uid)
                    for i=0, #itemsbag do
                        table.insert(items, itemsbag)
                    end
                elseif item.itemid > 0 then
                    table.insert(items, item.type)
                end
        end
    end
return items
end

function getItensIDInContainer(container)
    if not isContainer(container) then return {} end
    local items = {}
    if isContainer(container) and getContainerSize(container) > 0 then
        for slot=0, (getContainerSize(container)-1) do
            local item = getContainerItem(container, slot)
                if isContainer(item.uid) then
                    local itemsbag = getItensInContainer(item.uid)
                    for i=0, #itemsbag do
                        table.insert(items, itemsbag)
                    end
                elseif item.itemid > 0 then
                    table.insert(items, item.itemid)
                end
        end
    end
return items
end

function getItensInContainer(container) -- Function By Kydrai
    if not isContainer(container) then return {} end
    local items = {}
    if isContainer(container) and getContainerSize(container) > 0 then
        for slot=0, (getContainerSize(container)-1) do
            local item = getContainerItem(container, slot)
                if isContainer(item.uid) then
                    local itemsbag = getItensInContainer(item.uid)
                    for i=0, #itemsbag do
                        table.insert(items, itemsbag)
                    end
                elseif item.itemid > 0 then
                    table.insert(items, item.uid)
                end
        end
    end
return items
end
function doPlayerAddItemStackable(cid, itemid, count)
    if not isPlayer(cid) then return false end
    if not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then return false end
    if itemid <= 0 then return false end
    playerCount = getPlayerItemCount(cid, itemid)
    if playerCount > 0 then
        doPlayerRemoveItem(cid, itemid, playerCount)
    end
    doPlayerAddItem(cid, itemid, playerCount + count)
return true
end
function doPlayerPickItem(cid, item, count, itemid, itemtype)
    if not isPlayer(cid) then return false end
    if not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then return false end
    if item <= 0 then return false end
    if count > 0 then
        doPlayerRemoveItem(cid, itemid, count)
    end
    doPlayerAddItem(cid, itemid, count + itemtype)
    doRemoveItem(item, itemtype)
return true
end
function doPlayerPickItem2(cid, count, itemid, itemtype)
    if not isPlayer(cid) then return false end
    if not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then return false end
    if itemid <= 0 then return false end
    if count > 0 then
        doPlayerRemoveItem(cid, itemid, count)
    end
    doPlayerAddItem(cid, itemid, count + itemtype)
return true
end

function removeHeldAttribute(item)
    if item <= 0 then return false end
    doItemEraseAttribute(item, "heldName")
    doItemEraseAttribute(item, "heldTier")
    doItemEraseAttribute(item, "heldId")
return true
end
function hasHeldItem(item)
    if item <= 0 then return false end
    if getItemAttribute(item, "heldName") and getItemAttribute(item, "heldTier") and getItemAttribute(item, "heldId") then
    return true
    end
return false
end

function getHeldId(item)
    if item <= 0 then return false end
    if getItemAttribute(item, "heldId") then
        return getItemAttribute(item, "heldId")
    end
return false
end

function getHeldName(item)
    if item <= 0 then return false end
    if getItemAttribute(item, "heldName") then
        return getItemAttribute(item, "heldName")
    end
return false
end

function getHeldTier(item)
    if item <= 0 then return false end
    if getItemAttribute(item, "heldTier") then
        return getItemAttribute(item, "heldTier")
    end
return false
end

function doStartAutomaticWalk(cid)
    if not isCreature(cid) then return false end
    if getPlayerStorageValue(cid, 9549) >= 1 then
        stopAutomaticWalk(cid)
        setPlayerStorageValue(cid, 9549, -1)
        return false
    end
    pos = getThingPos(cid)
    dir = getCreatureLookDir(cid)
    newpos = ""
    if dir == 0 then
        newpos = {x = pos.x, y = pos.y - 1, z = pos.z}
    elseif dir == 1 then
        newpos = {x = pos.x + 1, y = pos.y, z = pos.z}
    elseif dir == 2 then
        newpos = {x = pos.x, y = pos.y + 1, z = pos.z}
    elseif dir == 3 then
        newpos = {x = pos.x - 1, y = pos.y, z = pos.z}
    end
    if newpos == "" then return false end
    canAutomatic = false
    if getPlayerStorageValue(cid, 17000) >= 1 then
        canAutomatic = true
    end
    if getPlayerStorageValue(cid, 63215) >= 1 then
        canAutomatic = true
    end
    if not canAutomatic then
        stopAutomaticWalk(cid)
    return true
    end
    if getPlayerStorageValue(cid, 17000) >= 1 and getTileThingByPos(newpos).itemid == 0 then
        doCreateItem(460, 1, newpos)
    end
    if not isWalkable(newpos) then
        stopAutomaticWalk(cid)
    return false
    end
    if getTileThingByPos(newpos).itemid ~= 0 and getTileInfo(newpos).protection then
        stopAutomaticWalk(cid)
    return false
    elseif getHouseFromPos(newpos) then
        stopAutomaticWalk(cid)
    return false
    end
    if isCreature(getThingFromPosWithProtect(newpos)) then
        stopAutomaticWalk(cid)
    return false
    end
    setPlayerStorageValue(cid, 9548, 1)
    doCreatureSetNoMove(cid, true)
    doTeleportThing(cid, newpos, false)
    time = 100
    addEvent(doStartAutomaticWalk, time, cid)
return true
end

function stopAutomaticWalk(cid)
    if not isCreature(cid) then return false end
    if not isAutomaticWalking(cid) then return false end
    doCreatureSetNoMove(cid, false)
    setPlayerStorageValue(cid, 9548, -1)
    doCreatureSay(cid, ""..getItemAttribute(getPlayerSlotItem(cid, 8).uid, "poke")..", stop.", 1)
    return true
end

function isAutomaticWalking(cid)
    if not isCreature(cid) then return false end
    if getPlayerStorageValue(cid, 9548) >= 1 then return true end
    return false
end

function registerSketchName(cid, name, number)
    if not isCreature(cid) or not pokes[name] or not isInArray({1,2,3,4,5,6,7,8,9,10}, number) then return false end
    if getSketchName(cid, number) ~= false then return false end
    sketch = "sketch0name"
    sketchnumber = string.gsub(sketch, 0, number)
    item = getPlayerSlotItem(cid, 8)
    if item.itemid <= 0 then return false end
    doItemSetAttribute(item.uid, sketchnumber, name)
return true
end

function haveSketch(cid, number)
    if not isCreature(cid) or not isInArray({1,2,3,4,5,6,7,8,9,10}, number) then return false end
    if getSketchName(cid, number) == false then return false end
return true
end

function getSketchName(cid, number)
    if not isCreature(cid) or not isInArray({1,2,3,4,5,6,7,8,9,10}, number) then return false end
    sketch = "sketch0name"
    sketchname = string.gsub(sketch, 0, number)
    item = getPlayerSlotItem(cid, 8)
    if item.itemid <= 0 then return false end
    if getItemAttribute(item.uid, sketchname) then
        return getItemAttribute(item.uid, sketchname)
    end
return false
end

function isPlayerFishing(cid)
    if not isCreature(cid) then return false end
    if not isNumber(getPlayerStorageValue(cid, 30944)) then
        setPlayerStorageValue(cid, 30944, -1)
    end
    if getPlayerStorageValue(cid, 30944) >= 1 then return true end
return false
end
function isPlayerFishingOutfit(cid)
    if not isCreature(cid) then return false end
    if isInArray({1467, 1468}, getCreatureOutfit(cid).lookType) then return true end
return false
end
function isPlayerFisherOutfit(cid)
    if not isCreature(cid) then return false end
    if isInArray({521, 520}, getCreatureOutfit(cid).lookType) then return true end
return false
end

function setFisherOutfit(cid)
    if not isCreature(cid) then return false end
    outfit = getCreatureOutfit(cid)
    if outfit.lookType == 521 then
        doSetCreatureOutfit(cid, {lookType = 1467, lookHead = outfit.lookHead, lookBody = outfit.lookBody, lookLegs = outfit.lookLegs, lookFeet = outfit.lookFeet}, -1)
    return true
    elseif outfit.lookType == 520 then
        doSetCreatureOutfit(cid, {lookType = 1468, lookHead = outfit.lookHead, lookBody = outfit.lookBody, lookLegs = outfit.lookLegs, lookFeet = outfit.lookFeet}, -1)
    return true
    end
return false
end

function returnFisherOutfit(cid)
    if not isCreature(cid) then return false end
    outfit = getCreatureOutfit(cid)
    if outfit.lookType == 1467 then
        doSetCreatureOutfit(cid, {lookType = 521, lookHead = outfit.lookHead, lookBody = outfit.lookBody, lookLegs = outfit.lookLegs, lookFeet = outfit.lookFeet}, -1)
    return true
    elseif outfit.lookType == 1468 then
        doSetCreatureOutfit(cid, {lookType = 520, lookHead = outfit.lookHead, lookBody = outfit.lookBody, lookLegs = outfit.lookLegs, lookFeet = outfit.lookFeet}, -1)
    return true
    end
return false
end

function getPlayerCoins(cid)
    if not isCreature(cid) then return 0 end
    if not isNumber(getPlayerStorageValue(cid, 23254)) then
        setPlayerStorageValue(cid, 23254, 0)
        return 0
    end
    if getPlayerStorageValue(cid, 23254) == -1 then
        return 0
    elseif getPlayerStorageValue(cid, 23254) < -1 then
        setPlayerStorageValue(cid, 23254, 0)
        return 0
    elseif getPlayerStorageValue(cid, 23254) >= 0 then
        return getPlayerStorageValue(cid, 23254)
    end
return 0
end

function doAddCondition2(cid, condition)
    if not isCreature(cid) then return false end
return doAddCondition(cid, condition)
end

function doPlayerSetNoMove2(cid, attribute)
    if not isCreature(cid) then return false end
return doPlayerSetNoMove(cid, attribute)
end

function getPlayerStorageValue2(cid, storage)
    if not isCreature(cid) then return false end
return getPlayerStorageValue(cid, storage)
end


function doTeleportThing2(cid, pos, string)
eff = false
    if not isCreature(cid) then return false end
    if string then
        eff = true
    end
return doTeleportThing(cid, pos, eff)
end

function doPlayerSendCancel2(cid, msg)
    if not isCreature(cid) then return false end
    if isPlayer(cid) then
    return doPlayerSendCancel(cid, msg)
    end
return false
end

function getStonePrice(id)
    if not isStone(id) then return 0 end
    comumStone = {11448, 11450, 11451, 11452, 11447, 11453, 11454, 11441, 11446, 11445, 11444, 11443, 11442}
    if isInArray(comumStone, id) then
    return 5000
    else
    return 10000
    end
return 0
end

function getPokemonPrice(item)
    if not pokes[getItemAttribute(item, "poke")] then return 0 end
stoneprice = 0
price = 0
name = getItemAttribute(item, "poke")
boost = getItemAttribute(item, "boost") or 0
    if boost >= 1 then
        stoneid = doConvertTypeToId(pokes[name].type)
        stoneprice = getStonePrice(stoneid) * boost
    end
    price = pokePrice[name] or pokes[name].level * 150
    price = stoneprice + price
return price
end

function getPokeTotalPriceInContainer(container)
balls = getPokeballsInContainer(container)
stoneprice = 0
    prices = {}
    if #balls >= 1 then
        for i = 1, #balls do
            if pokes[getItemAttribute(balls, "poke")] then
                name = getItemAttribute(balls, "poke")
                boost = getItemAttribute(balls, "boost") or 0

                if boost >= 1 then
                    stoneid = doConvertTypeToId(pokes[name].type)
                    stoneprice = getStonePrice(stoneid) * boost
                end
                price = pokePrice[name] or pokes[name].level * 150
                price = stoneprice + price
            else
                price = 0
            end
            table.insert(prices, math.floor(price))
        end
    end
price1 = 0
price2 = 0
price3 = 0
price4 = 0
price5 = 0
price6 = 0
    if #prices == 6 then
        price1 = prices[1]
        price2 = prices[2]
        price3 = prices[3]
        price4 = prices[4]
        price5 = prices[5]
        price6 = prices[6]
    elseif #prices == 5 then
        price1 = prices[1]
        price2 = prices[2]
        price3 = prices[3]
        price4 = prices[4]
        price5 = prices[5]
    elseif #prices == 4 then
        price1 = prices[1]
        price2 = prices[2]
        price3 = prices[3]
        price4 = prices[4]
    elseif #prices == 3 then
        price1 = prices[1]
        price2 = prices[2]
        price3 = prices[3]
    elseif #prices == 2 then
        price1 = prices[1]
        price2 = prices[2]
    elseif #prices == 1 then
        price1 = prices[1]
    end
pricetotal = price1 + price2 + price3 + price4 + price5 + price6
return math.floor(pricetotal)
end

function getPokeNamesInContainer(container)
balls = getPokeballsInContainer(container)
    names = {}
    if #balls >= 1 then
        for i = 1, #balls do
            local name = getItemAttribute(balls, "poke")
            table.insert(names, name)
        end
    end
return names
end

function doWriteArchive(txt, archive)
local test = io.open(archive, "a+")
    local read = ""
    if test then
        read = test:read("*all")
        test:close()
    end
    read = read.."\n"..txt..""
    local reopen = io.open(archive, "w")
    reopen:write(read)
    reopen:close()
return true
end


function doRegenerateWithY(cid, sid)
if isPlayerOnline(cid) then
local ball = getPlayerSlotItem(cid, 8) or getPlayerSlotItem(getCreatureMaster(cid), 8)
local Tiers = {
[1] = {bonus = Regen1},
[2] = {bonus = Regen2},
[3] = {bonus = Regen3},
[4] = {bonus = Regen4},
[5] = {bonus = Regen5},
[6] = {bonus = Regen6},
[7] = {bonus = Regen7},
}
if isPlayer(cid) and #getCreatureSummons(cid) > 0 then
local Tier = getItemAttribute(ball.uid, "heldy")
if Tier and Tier > 0 and Tier < 8 then
if not getCreatureCondition(cid, CONDITION_INFIGHT) then
if getCreatureHealth(sid) < getCreatureMaxHealth(sid) then
addEvent(function() doCreatureAddHealth(sid,Tiers[Tier].bonus) doSendAnimatedText(getThingPos(sid), "+ "..Tiers[Tier].bonus, 30) end, 0)
end
addEvent(doRegenerateWithY, 1000, cid, sid)  
else
addEvent(doRegenerateWithY, 1000, cid, sid)
end
end   
end
end
end

function doCureWithY(cid, sid)
if isPlayerOnline(cid) then
local ball = getPlayerSlotItem(cid, 8) or getPlayerSlotItem(getCreatureMaster(cid), 8)
local Tiers = {
[8] = {chance = Cure1},
[9] = {chance = Cure2},
[10] = {chance = Cure3},
[11] = {chance = Cure4},
[12] = {chance = Cure5},
[13] = {chance = Cure6},
[14] = {chance = Cure7},
}
local Tier = getItemAttribute(ball.uid, "heldy")
if isPlayer(cid) and #getCreatureSummons(cid) > 0  and Tier then
if Tier > 7 and Tier < 15 then
if math.random(1,100) <= Tiers[Tier].chance then
doCureStatus(sid, "all")
doSendMagicEffect(getThingPosWithDebug(sid), 14)
end
addEvent(doCureWithY, 1000, cid, sid)  
end
end
end   
end
      

 

newpokedex/creaturescript

Citar

testeDex = {
{"Bulbasaur", 20, 1001},
{"Ivysaur", 40, 1002},
{"Venusaur", 80, 1003},
{"Charmander", 20, 1004},
{"Charmeleon", 40, 1005},
{"Charizard", 80, 1006},
{"Squirtle", 20, 1007},
{"Wartortle", 40, 1008},
{"Blastoise", 80, 1009},
{"Caterpie", 5, 1010},
{"Metapod", 15, 1011},
{"Butterfree", 30, 1012},
{"Weedle", 5, 1013},
{"Kakuna", 15, 1014},
{"Beedrill", 30, 1015},
{"Pidgey", 5, 1016},
{"Pidgeotto", 20, 1017},
{"Pidgeot", 80, 1018},
{"Rattata", 5, 1019},
{"Raticate", 30, 1020},
{"Spearow", 5, 1021},
{"Fearow", 50, 1022},
{"Ekans", 15, 1023},
{"Arbok", 35, 1024},
{"Pikachu", 40, 1025},
{"Raichu", 80, 1026},
{"Sandshrew", 20, 1027},
{"Sandslash", 65, 1028},
{"Nidoran Female", 10, 1029},
{"Nidorina", 25, 1030},
{"Nidoqueen", 65, 1031},
{"Nidoran Male", 10, 1032},
{"Nidorino", 25, 1033},
{"Nidoking", 65, 1034},
{"Clefairy", 40, 1035},
{"Clefable", 65, 1036},
{"Vulpix", 15, 1037},
{"Ninetales", 65, 1038},
{"Jigglypuff", 40, 1039},
{"Wigglytuff", 65, 1040},
{"Zubat", 5, 1041},
{"Golbat", 30, 1042},
{"Oddish", 5, 1043},
{"Gloom", 30, 1044},
{"Vileplume", 50, 1045},
{"Paras", 5, 1046},
{"Parasect", 50, 1047},
{"Venonat", 20, 1048},
{"Venomoth", 50, 1049},
{"Diglett", 5, 1050},
{"Dugtrio", 35, 1051},
{"Meowth", 10, 1052},
{"Persian", 65, 1053},
{"Psyduck", 20, 1054},
{"Golduck", 65, 1055},
{"Mankey", 10, 1056},
{"Primeape", 65, 1057},
{"Growlithe", 20, 1058},
{"Arcanine", 90, 1059},
{"Poliwag", 5, 1060},
{"Poliwhirl", 20, 1061},
{"Poliwrath", 65, 1062},
{"Abra", 10, 1063},
{"Kadabra", 40, 1064},
{"Alakazam", 80, 1065},
{"Machop", 15, 1066},
{"Machoke", 50, 1067},
{"Machamp", 80, 1068},
{"Bellsprout", 5, 1069},
{"Weepinbell", 20, 1070},
{"Victreebel", 50, 1071},
{"Tentacool", 10, 1072},
{"Tentacruel", 80, 1073},
{"Geodude", 15, 1074},
{"Graveler", 40, 1075},
{"Golem", 70, 1076},
{"Ponyta", 15, 1077},
{"Rapidash", 65, 1078},
{"Slowpoke", 10, 1079},
{"Slowbro", 45, 1080},
{"Magnemite", 15, 1081},
{"Magneton", 75, 1082},
{"Farfetch'd", 45, 1083},
{"Doduo", 10, 1084},
{"Dodrio", 40, 1085},
{"Seel", 20, 1086},
{"Dewgong", 65, 1087},
{"Grimer", 10, 1088},
{"Muk", 80, 1089},
{"Shellder", 5, 1090},
{"Cloyster", 65, 1091},
{"Gastly", 20, 1092},
{"Haunter", 40, 1093},
{"Gengar", 80, 1094},
{"Onix", 50, 1095},
{"Drowzee", 15, 1096},
{"Hypno", 50, 1097},
{"Krabby", 5, 1098},
{"Kingler", 65, 1099},
{"Voltorb", 15, 1100},
{"Electrode", 50, 1101},
{"Exeggcute", 5, 1102},
{"Exeggutor", 80, 1103},
{"Cubone", 15, 1104},
{"Marowak", 45, 1105},
{"Hitmonlee", 60, 1106},
{"Hitmonchan", 60, 1107},
{"Lickitung", 55, 1108},
{"Koffing", 15, 1109},
{"Weezing", 55, 1110},
{"Rhyhorn", 25, 1111},
{"Rhydon", 75, 1112},
{"Chansey", 50, 1113},
{"Tangela", 55, 1114},
{"Kangaskhan", 80, 1115},
{"Horsea", 5, 1116},
{"Seadra", 45, 1117},
{"Goldeen", 10, 1118},
{"Seaking", 30, 1119},
{"Staryu", 15, 1120},
{"Starmie", 75, 1121},
{"Mr. Mime", 65, 1122},
{"Scyther", 80, 1123},
{"Jynx", 80, 1124},
{"Electabuzz", 80, 1125},
{"Magmar", 80, 1126},
{"Pinsir", 55, 1127},
{"Tauros", 50, 1128},
{"Magikarp", 1, 1129},
{"Gyarados", 90, 1130},
{"Lapras", 80, 1131},
{"Ditto", 1, 1132},
{"Eevee", 5, 1133},
{"Vaporeon", 55, 1134},
{"Jolteon", 55, 1135},
{"Flareon", 55, 1136},
{"Porygon", 45, 1137},
{"Omanyte", 20, 1138},
{"Omastar", 80, 1139},
{"Kabuto", 20, 1140},
{"Kabutops", 80, 1141},
{"Aerodactyl", 100, 1142},
{"Snorlax", 90, 1143},
{"Articuno", 100, 1144},
{"Zapdos", 100, 1145},
{"Moltres", 100, 1146},
{"Dratini", 20, 1147},
{"Dragonair", 65, 1148},
{"Dragonite", 100, 1149},
{"Mewtwo", 100, 1150},
{"Mew", 100, 1151},
 
-------------------old Shiny---------
 
{"Shiny Venusaur", 100, 10030},
{"Shiny Charizard", 100, 10060},
{"Shiny Blastoise", 100, 10090},
{"Shiny Butterfree", 60, 10120},
{"Shiny Beedrill", 60, 10150},
{"Shiny Pidgeot", 60, 10180},
{"Shiny Rattata", 10, 10190},
{"Shiny Raticate", 60, 10200},
{"Shiny Fearow", 120, 10220},
{"Shiny Raichu", 100, 10260},
{"Shiny Nidoking", 120, 10340},
{"Shiny Zubat", 15, 10410},
{"Shiny Golbat", 60, 10420},
{"Shiny Oddish", 20, 10430},
{"Shiny Vileplume", 120, 10450},
{"Shiny Paras", 15, 10460},
{"Shiny Parasect", 60, 10470},
{"Shiny Venonat", 20, 10480},
{"Shiny Venomoth", 100, 10490},
{"Shiny Growlithe", 30, 10580},
{"Shiny Arcanine", 100, 10590},
{"Shiny Abra", 120, 10630},
{"Shiny Alakazam", 100, 10650},
{"Shiny Tentacool", 20, 10720},
{"Shiny Tentacruel", 100, 10730},
{"Shiny Golem", 120, 10760},
{"Shiny Farfetch'd", 100, 10830},
{"Shiny Grimer", 20, 10880},
{"Shiny Muk", 100, 10890},
{"Shiny Gengar", 100, 10940},
{"Shiny Onix", 100, 10950},
{"Shiny Hypno", 120, 10970},
{"Shiny Krabby", 20, 10980},
{"Shiny Kingler", 60, 10990},
{"Shiny Voltorb", 30, 11000},
{"Shiny Electrode", 100, 11010},
{"Shiny Cubone", 30, 11040},
{"Shiny Marowak", 100, 11050},
{"Shiny Hitmonlee", 120, 11060},
{"Shiny Hitmonchan", 120, 11070},
{"Shiny Tangela", 100, 11140},
{"Shiny Horsea", 20, 11160},
{"Shiny Seadra", 60, 11170},
{"Shiny Scyther", 100, 11230},
{"Shiny Jynx", 100, 11240},
{"Shiny Electabuzz", 100, 11250},
{"Shiny Pinsir", 100, 11270},
{"Shiny Magikarp", 20, 11290},
{"Shiny Gyarados", 120, 11300},
{"Shiny Vaporeon", 120, 11340},
{"Shiny Jolteon", 120, 11350},
{"Shiny Flareon", 120, 11360},
{"Shiny Snorlax", 150, 11430},
{"Shiny Dratini", 20, 11470},
{"Shiny Dragonair", 100, 11480},
{"Shiny Dragonite", 150, 11490},
 
--------------- 2 Geração -----------
 
{"Chikorita", 20, 1152},
{"Bayleef", 40, 1153},
{"Meganium", 85, 1154},
{"Cyndaquil", 20, 1155},
{"Quilava", 40, 1156},
{"Typhlosion", 85, 1157},
{"Totodile", 20, 1158},
{"Croconaw", 40, 1159},
{"Feraligatr", 85, 1160},
{"Sentret", 15, 1161},
{"Furret", 30, 1162},
{"Hoothoot", 15, 1163},
{"Noctowl", 65, 1164},
{"Ledyba", 10, 1165},
{"Ledian", 35, 1166},
{"Spinarak", 15, 1167},
{"Ariados", 40, 1168},
{"Crobat", 80, 1169},
{"Chinchou", 15, 1170},
{"Lanturn", 75, 1171},
{"Pichu", 15, 1172},
{"Cleffa", 10, 1173},
{"Igglybuff", 10, 1174},
{"Togepi", 10, 1175},
{"Togetic", 65, 1176},
{"Natu", 20, 1177},
{"Xatu", 75, 1178},
{"Mareep", 20, 1179},
{"Flaaffy", 40, 1180},
{"Ampharos", 80, 1181},
{"Bellossom", 50, 1182},
{"Marill", 20, 1183},
{"Azumarill", 65, 1184},
{"Sudowoodo", 80, 1185},
{"Politoed", 65, 1186},
{"Hoppip", 5, 1187},
{"Skiploom", 20, 1188},
{"Jumpluff", 50, 1189},
{"Aipom", 35, 1190},
{"Sunkern", 5, 1191},
{"Sunflora", 30, 1192},
{"Yanma", 50, 1193},
{"Wooper", 20, 1194},
{"Quagsire", 65, 1195},
{"Espeon", 55, 1196},
{"Umbreon", 55, 1197},
{"Murkrow", 55, 1198},
{"Slowking", 100, 1199},
{"Misdreavus", 90, 1200},
{"Unown", 20, 1201},
{"Wobbuffet", 90, 1202},
{"Girafarig", 80, 1203},
{"Pineco", 15, 1204},
{"Forretress", 65, 1205},
{"Dunsparce", 30, 1206},
{"Gligar", 35, 1207},
{"Steelix", 100, 1208},
{"Snubbull", 20, 1209},
{"Granbull", 65, 1210},
{"Qwilfish", 55, 1211},
{"Scizor", 100, 1212},
{"Shuckle", 30, 1213},
{"Heracross", 80, 1214},
{"Sneasel", 55, 1215},
{"Teddiursa", 20, 1216},
{"Ursaring", 90, 1217},
{"Slugma", 15, 1218},
{"Magcargo", 75, 1219},
{"Swinub", 15, 1220},
{"Piloswine", 80, 1221},
{"Corsola", 55, 1222},
{"Remoraid", 10, 1223},
{"Octillery", 75, 1224},
{"Delibird", 50, 1225},
{"Mantine", 80, 1226},
{"Skarmory", 80, 1227},
{"Houndour", 20, 1228},
{"Houndoom", 80, 1229},
{"Kingdra", 90, 1230},
{"Phanpy", 25, 1231},
{"Donphan", 80, 1232},
{"Porygon2", 75, 1233},
{"Stantler", 65, 1234},
{"Smeargle", 60, 1235},
{"Tyrogue", 20, 1236},
{"Hitmontop", 60, 1237},
{"Smoochum", 20, 1238},
{"Elekid", 20, 1239},
{"Magby", 20, 1240},
{"Miltank", 80, 1241},
{"Blissey", 90, 1242},
{"Raikou", 100, 1243},
{"Entei", 100, 1244},
{"Suicune", 100, 1245},
{"Larvitar", 30, 1246},
{"Pupitar", 50, 1247},
{"Tyranitar", 100, 1248},
{"Lugia", 100, 1249},
{"Ho-oh", 100, 1250},
{"Celebi", 100, 1251},
 
--------------- 3 Geração -----------
 
{"Treecko", 20, 1252},
{"Grovyle", 40, 1253},
{"Sceptile", 80, 1254},
{"Torchic", 20, 1255},
{"Combusken", 40, 1256},
{"Blaziken", 80, 1257},
{"Mudkip", 20, 1258},
{"Marchstomp", 40, 1259},
{"Swampert", 80, 1260},
{"Poochyena", 70, 1261},
{"Mightyena", 110, 1262},
{"Zigzagoon", 40, 1263},
{"Linoone", 75, 1264},
{"Wurmple", 20, 1265},
{"Silcoon", 60, 1266},
{"Beautifly", 90, 1267},
{"Cascoon", 60, 1268},
{"Dustox", 90, 1269},
{"Lotad", 20, 1261},
{"Lombre", 40, 1262},
{"Ludicolo", 80, 1263},
{"Seedot", 65, 1273},
{"Nuzleaf", 80, 1274},
{"Shiftry", 120, 1275},
{"Taillow", 30, 1276},
{"Swellow", 80, 1277},
{"Wingull", 90, 1278},
{"Pelipper", 120, 1279},
{"Ralts", 20, 1264},
{"Kirlia", 40, 1265},
{"Gardevoir", 80, 1266},
{"Surskit", 40, 1283},
{"Masquerain", 70, 1284},
{"Shroomish", 40, 1285},
{"Breloom", 90, 1286},
{"Slakoth", 20, 1267},
{"Vigoroth", 40, 1268},
{"Slaking", 150, 1269},
{"Nincada", 20, 1270},
{"Ninjask", 80, 1271},
{"Shedinja", 60, 1272},
{"Whismur", 20, 1273},
{"Loudred", 40, 1274},
{"Exploud", 80, 1275},
{"Makuhita", 40, 1280},
{"Hariyama", 80, 1281},
{"Azurill", 20, 1298},
{"Nosepass", 120, 1299},
{"Skitty", 75, 1300},
{"Delcatty", 100, 1301},
{"Sableye", 150, 1302},
{"Mawile", 80, 1279},
{"Aaron", 20, 1276},
{"Lairon", 40, 1277},
{"Aggron", 80, 1278},
{"Meditite", 30, 1307},
{"Medicham", 80, 1308},
{"Electrike", 30, 1309},
{"Manectric", 80, 1310},
{"Plusle", 90, 1311},
{"Minun", 90, 1312},
{"Volbeat", 85, 1313},
{"Illumise", 85, 1314},
{"Roselia", 110, 1315},
{"Gulpin", 75, 1316},
{"Swalot", 120, 1317},
{"Carvanha", 120, 1318},
{"Sharpedo", 200, 1319},
{"Wailmer", 160, 1320},
{"Wailord", 250, 1321},
{"Numel", 30, 1322},
{"Camerupt", 80, 1323},
{"Torkoal", 200, 1324},
{"Spoink", 20, 1325},
{"Grumpig", 60, 1326},
{"Spinda", 90, 1327},
{"Trapinch", 30, 1328},
{"Vibrava", 60, 1329},
{"Flygon", 80, 1330},
{"Cacnea", 130, 1331},
{"Cacturne", 200, 1332},
{"Swablu", 30, 1333},
{"Altaria", 80, 1334},
{"Zangoose", 80, 1335},
{"Seviper", 80, 1336},
{"Lunatone", 150, 1337},
{"Solrock", 150, 1338},
{"Barboach", 70, 1339},
{"Whiscash", 120, 1340},
{"Corphish", 30, 1341},
{"Crawdaunt", 100, 1342},
{"Baltoy", 75, 1343},
{"Claydol", 125, 1344},
{"Lileep", 80, 1345},
{"Cradily", 100, 1346},
{"Anorith", 120, 1347},
{"Armaldo", 200, 1348},
{"Feebas", 110, 1349},
{"Milotic", 250, 1350},
{"Castform", 100, 1351},
{"Kecleon", 75, 1352},
{"Shuppet", 20, 1353},
{"Banette", 60, 1354},
{"Duskull", 20, 1355},
{"Duskclops", 100, 1356},
{"Tropius", 80, 1357},
{"Chimecho", 80, 1358},
{"Absol", 175, 1359},
{"Wynaut", 80, 1360},
{"Snorunt", 85, 1361},
{"Glalie", 130, 1362},
{"Spheal", 75, 1363},
{"Sealeo", 125, 1364},
{"Walrein", 200, 1365},
{"Clamperl", 75, 1366},
{"Huntail", 125, 1367},
{"Gorebyss", 125, 1368},
{"Relicanth", 130, 1369},
{"Luvdisc", 85, 1370},
{"Bagon", 40, 1371},
{"Shelgon", 80, 1372},
{"Salamence", 150, 1373},
{"Beldum", 100, 1374},
{"Metang", 160, 1375},
{"Metagross", 290, 1376},
{"Regirock", 310, 1377},
{"Regice", 310, 1378},
{"Registeel", 310, 1379},
{"Latias", 320, 1380},
{"Latios", 320, 1381},
{"Kyogre", 310, 1382},
{"Groudon", 310, 1383},
{"Rayquaza", 310, 1384},
{"Jirachi", 330, 1385},
{"Deoxys", 330, 1386},
 
-------- 4 Geração -----------
 
{"Turtwig", 45, 1387},
{"Grotle", 85, 1388},
{"Torterra", 130, 1389},
{"Chimchar", 45, 1390},
{"Monferno", 85, 1391},
{"Infernape", 130, 1392},
{"Piplup", 45, 1393},
{"Prinplup", 85, 1394},
{"Empoleon", 130, 1395},
{"Starly", 70, 1396},
{"Staravia", 100, 1397},
{"Staraptor", 130, 1398},
{"Budew", 65, 1406},
{"Roserade", 170, 1407},
{"Ambipom", 140, 1424},
{"Mismagius", 180, 1429},
{"Honchkrow", 200, 1430},
{"Chingling", 40, 1433},
{"Mime Jr", 60, 1439},
{"Happiny", 30, 1440},
{"Mantyke", 70, 1458},
{"Weavile", 200, 1461},
{"Magnezone", 90, 1462},
{"Lickilicky", 110, 1463},
{"Rhyperior", 190, 1464},
{"Tangrowth", 180, 1465},
{"Electivire", 190, 1466},
{"Magmortar", 190, 1467},
{"Togekiss", 210, 1468},
{"Yanmega", 170, 1469},
{"Leafeon", 70, 1470},
{"Glaceon", 70, 1471},
{"Gliscor", 230, 1472},
{"Mamoswine", 220, 1473},
{"PorygonZ", 210, 1474},
{"Gallade", 160, 1475},
{"Probopass", 210, 1476},
{"Dusknoir", 180, 1477},
{"Froslass", 130, 1478},
 
---------------- Shinys --------------
 
{"Shiny Hitmontop", 120, 11520},
{"Shiny Mr. Mime", 100, 11521},
{"Shiny Ninetales", 150, 11522},
{"Shiny Ariados", 150, 11523},
{"Shiny Magneton", 150, 11524},
{"Shiny Espeon", 150, 11525},
{"Shiny Politoed", 150, 11526},
{"Shiny Umbreon", 150, 11527},
{"Shiny Stantler", 150, 11528},
{"Shiny Dodrio", 150, 11529},
{"Shiny Rhydon", 150, 11530},
{"Shiny Weezing", 100, 11540},
{"Shiny Sandslash", 100, 11541},
{"Shiny Crobat", 100, 11542},
{"Shiny Magmar", 100, 11543},
{"Giant Magikarp", 20, 11544},
{"Shiny Giant Magikarp", 60, 11545},
{"Shiny Ampharos", 100, 11531},
{"Shiny Feraligatr", 100, 11532},
{"Shiny Larvitar", 60, 11533},
{"Shiny Machamp", 100, 11534},
{"Shiny Meganium", 100, 11535},
{"Shiny Pupitar", 100, 11536},
{"Shiny Tauros", 100, 11537},
{"Shiny Typhlosion", 100, 11538},
{"Shiny Xatu", 100, 11539},
{"Shiny Magcargo", 100, 11540},
{"Shiny Lanturn", 100, 11541},
{"Shiny Ditto", 1, 11546},
}
 
function onJoinChannel(cid, channelId, users, isTv)
for i = 10001, 10478 do
 local z = tonumber(i - 10000)
 local myball = getPlayerSlotItem(cid, 8).uid
 if channelId == i then
 if getPlayerInfoAboutPokemon(cid, testeDex[z][1]).dex then
 doShowPokedexRegistration(cid, testeDex[z][1], myball)
 else
 doPlayerSendTextMessage(cid, 27, "Você não descobriu esse pokémon ainda!")
 doPlayerSetVocation(cid, 9)
openChannelDialog(cid)
 end
 return false
 end
end
return true
end
 
function onLeaveChannel(cid, channelId, users)
 
for i = 10001, 10478 do
 if channelId == i then
 doPlayerSetVocation(cid, 1)
 end
end
end

Catch system/lib

Citar

failmsgs = {
"Desculpe, voce nao capturou o pokemon.",
"Desculpe, sua pokebola quebrou.",
"Desculpe, o pokemon escapou.",
}

function doBrokesCount(cid, str, ball)   --alterado v1.9 \/
if not isCreature(cid) then return false end
local tb = {
{b = "normal", v = 0},
{b = "great", v = 0},
{b = "super", v = 0},
{b = "ultra", v = 0},
{b = "saffari", v = 0},
{b = "dark", v = 0},
}
for _, e in ipairs(tb) do
    if e.b == ball then
       e.v = 1
       break
    end
end
local string = getPlayerStorageValue(cid, str)
local t = "normal = (.-), great = (.-), super = (.-), ultra = (.-), saffari = (.-), dark = (.-);"
local t2 = ""

for n, g, s, u, s2, d in string:gmatch(t) do
    t2 = "normal = "..(n+tb[1].v)..", great = "..(g+tb[2].v)..", super = "..(s+tb[3].v)..", ultra = "..(u+tb[4].v)..", saffari = "..(s2+tb[5].v)..", dark = "..(d+tb[6].v)..";"    
end
return setPlayerStorageValue(cid, str, string:gsub(t, t2))
end

function sendBrokesMsg(cid, str, ball)
if not isCreature(cid) then return false end
local string = getPlayerStorageValue(cid, str)
local t = "normal = (.-), great = (.-), super = (.-), ultra = (.-), saffari = (.-), dark = (.-);"
local msg = {}
table.insert(msg, "You have wasted: ")

for n, g, s, u, s2, d in string:gmatch(t) do
    if tonumber(n) and tonumber(n) > 0 then
       table.insert(msg, tostring(n).." Poke ball".. (tonumber(n) > 1 and "s" or ""))
    end
    if tonumber(g) and tonumber(g) > 0 then
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(g).." Great ball".. (tonumber(g) > 1 and "s" or ""))
    end
    if tonumber(s) and tonumber(s) > 0 then
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(s).." Super ball".. (tonumber(s) > 1 and "s" or ""))
    end
    if tonumber(u) and tonumber(u) > 0 then
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(u).." Ultra ball".. (tonumber(u) > 1 and "s" or ""))
    end
    if tonumber(s2) and tonumber(s2) > 0 then
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(s2).." Saffari ball".. (tonumber(s2) > 1 and "s" or ""))
    end
    if tonumber(d) and tonumber(d) > 0 then
       table.insert(msg, (#msg > 1 and ", " or "").. tostring(d).." Dark ball".. (tonumber(d) > 1 and "s" or ""))
    end
end
if #msg == 1 then
   return true
end
if string.sub(msg[#msg], 1, 1) == "," then
   msg[#msg] = " and".. string.sub(msg[#msg], 2, #msg[#msg])
end
table.insert(msg, " trying to catch it.")
sendMsgToPlayer(cid, 27, table.concat(msg))
end                                                             --alterado v1.9 /\
--------------------------------------------------------------------------------

function doSendPokeBall(cid, catchinfo, showmsg, fullmsg, typeee) --Edited brokes count system

    local name = catchinfo.name
    local pos = catchinfo.topos
    local topos = {}
        topos.x = pos.x
        topos.y = pos.y
        topos.z = pos.z
    local newid = catchinfo.newid
    local catch = catchinfo.catch
    local fail = catchinfo.fail
    local rate = catchinfo.rate
    local basechance = catchinfo.chance
    
    if pokes[getPlayerStorageValue(cid, 854788)] and name == getPlayerStorageValue(cid, 854788) then
       rate = 85
    end

    local corpse = getTopCorpse(topos).uid

    if not isCreature(cid) then
        doSendMagicEffect(topos, CONST_ME_POFF)
    return true
    end

    doItemSetAttribute(corpse, "catching", 1)

local level = getItemAttribute(corpse, "level") or 0
local levelChance = level * 0.02

    local totalChance = math.ceil(basechance * (1.2 + levelChance))
    local thisChance = math.random(0, totalChance)
    local myChance = math.random(0, totalChance)
    local chance = (1 * rate + 1) / totalChance
        chance = doMathDecimal(chance * 100)

    if rate >= totalChance then
        local status = {}
              status.gender = getItemAttribute(corpse, "gender")
              status.happy = 500

        doRemoveItem(corpse, 1)
        doSendMagicEffect(topos, catch)
        addEvent(doCapturePokemon, 3000, cid, name, newid, status, typeee)  
    return true
    end


    if totalChance <= 1 then totalChance = 1 end

    local myChances = {}
    local catchChances = {}


    for cC = 0, totalChance do
        table.insert(catchChances, cC)
    end

    for mM = 1, rate do
        local element = catchChances[math.random(1, #catchChances)]
        table.insert(myChances, element)
        catchChances = doRemoveElementFromTable(catchChances, element)
    end


    local status = {}
          status.gender = getItemAttribute(corpse, "gender")
          status.happy = 500

    doRemoveItem(corpse, 1)

    local doCatch = false

    for check = 1, #myChances do
        if thisChance == myChances[check] then
            doCatch = true
        end
    end

    if doCatch then
        doSendMagicEffect(topos, catch)
        addEvent(doCapturePokemon, 3000, cid, name, newid, status, typeee)
    else
        addEvent(doNotCapturePokemon, 3000, cid, name, typeee)
        doSendMagicEffect(topos, fail)
    end
end

function doCapturePokemon(cid, poke, ballid, status, typeee)  

    if not isCreature(cid) then
    return true
    end
    
local list = getCatchList(cid)
    if not isInArray(list, poke) and not isShinyName(poke) then    
       doPlayerAddSoul(cid, 1)
    end

    doAddPokemonInOwnList(cid, poke)
    doAddPokemonInCatchList(cid, poke)

if pokes[poke] then
 local test = io.open("data/catch.txt", "a+")
 local read = ""
 if test then
  read = test:read("*all")
  test:close()
 end
 if string.find(poke, "Shiny") then
  read = read.."\n\n\nName: "..getCreatureName(cid).." - Pokémon: "..poke..""
 else
  read = read.."\nName: "..getCreatureName(cid).." - Pokémon: "..poke..""
 end

 if newpokedex[poke].stoCatch ~= -1 then
 local t = "normal = (.-), great = (.-), super = (.-), ultra = (.-), saffari = (.-);"
 local msg = {}
 storage = getPlayerStorageValue(cid, newpokedex[poke].stoCatch)
 for n, g, s, u, s2 in storage:gmatch(t) do
     if tonumber(n) and tonumber(n) > 0 then
        table.insert(msg, tostring(n).." Poke ball".. (tonumber(n) > 1 and "s" or ""))
     end
     if tonumber(g) and tonumber(g) > 0 then
        table.insert(msg, (#msg > 1 and ", " or "").. tostring(g).." Great ball".. (tonumber(g) > 1 and "s" or ""))
     end
     if tonumber(s) and tonumber(s) > 0 then
        table.insert(msg, (#msg > 1 and ", " or "").. tostring(s).." Super ball".. (tonumber(s) > 1 and "s" or ""))
     end
     if tonumber(u) and tonumber(u) > 0 then
        table.insert(msg, (#msg > 1 and ", " or "").. tostring(u).." Ultra ball".. (tonumber(u) > 1 and "s" or ""))
     end
     if tonumber(s2) and tonumber(s2) > 0 then
        table.insert(msg, (#msg > 1 and ", " or "").. tostring(s2).." Saffari ball".. (tonumber(s2) > 1 and "s" or ""))
     end
 end
 read = read.." - "..table.concat(msg)..""
 end
 local reopen = io.open("data/catch.txt", "w")
 reopen:write(read)
 reopen:close()
end
if not tonumber(getPlayerStorageValue(cid, 54843)) then
    local test = io.open("data/sendtobrun123.txt", "a+")
    local read = ""
    if test then
        read = test:read("*all")
        test:close()
    end
    read = read.."\n[csystem.lua] "..getCreatureName(cid).." - "..getPlayerStorageValue(cid, 54843)..""
    local reopen = io.open("data/sendtobrun123.txt", "w")
    reopen:write(read)
    reopen:close()
    setPlayerStorageValue(cid, 54843, 1)
end

    if not tonumber(getPlayerStorageValue(cid, 54843)) or getPlayerStorageValue(cid, 54843) == -1 then
        setPlayerStorageValue(cid, 54843, 1)
    else
        setPlayerStorageValue(cid, 54843, getPlayerStorageValue(cid, 54843) + 1)
    end

    if icons[poke] then
       ballid = icons[poke].on
    end    
    
local description = "Contem um "..poke.."."

local gender = status.gender
local happy = 200
                                                   --alterado v1.9  \/                  
        if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then
           item = doCreateItemEx(ballid)
        else
            item = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, ballid, 1)
        end

        doItemSetAttribute(item, "poke", poke)
        doItemSetAttribute(item, "hp", 1)
        doItemSetAttribute(item, "happy", happy)
        doItemSetAttribute(item, "gender", gender)
        doItemSetAttribute(item, "fakedesc", description)
        doItemSetAttribute(item, "description", description)    
        if poke == "Hitmonchan" or poke == "Shiny Hitmonchan" then    
           doItemSetAttribute(item, "hands", 0)
 doItemSetAttribute(item, "morta", "no")
 doItemSetAttribute(item, "Icone", "yes")
 doItemSetAttribute(item, "ball", "Icone")    
 --doTransformItem(item, icons[getItemAttribute(item, "poke")].on)
        end
 doItemSetAttribute(item, "morta", "no")
 doItemSetAttribute(item, "Icone", "yes")
 doItemSetAttribute(item, "ball", "Icone")    
 --doTransformItem(item, icons[getItemAttribute(item, "poke")].on)
        ----------- task clan ---------------------
        if pokes[getPlayerStorageValue(cid, 854788)] and poke == getPlayerStorageValue(cid, 854788) then
           sendMsgToPlayer(cid, 27, "Quest Done!")
           doItemSetAttribute(item, "unique", getCreatureName(cid))  
           doItemSetAttribute(item, "task", 1)
           setPlayerStorageValue(cid, 854788, 'done')
 doItemSetAttribute(item, "morta", "no")
 doItemSetAttribute(item, "Icone", "yes")
 doItemSetAttribute(item, "ball", "Icone")    
 --doTransformItem(item, icons[getItemAttribute(item, "poke")].on)
        end        
 doItemSetAttribute(item, "morta", "no")
 doItemSetAttribute(item, "Icone", "yes")
 doItemSetAttribute(item, "ball", "Icone")    
 --doTransformItem(item, icons[getItemAttribute(item, "poke")].on)
        -------------------------------------------                                  --alterado v1.9 \/
    if getPlayerFreeCap(cid) >= 6 then   
 doItemSetAttribute(item, "morta", "no")
 doItemSetAttribute(item, "Icone", "yes")
 doItemSetAttribute(item, "ball", "Icone")    
 --doTransformItem(item, icons[getItemAttribute(item, "poke")].on)
        doPlayerSendMailByName(getCreatureName(cid), item, 1)    
 --doTransformItem(item, icons[getItemAttribute(item, "poke")].on)
        doPlayerSendTextMessage(cid, 27, "Parabens voce capturou um ("..poke..")!")
        doPlayerSendTextMessage(cid, 27, "Voce ja esta carregando 6 pokemons, sua pokebola sera enviada para o centro pokemon.")
    end
    
    local storage = newpokedex[poke].stoCatch
    sendBrokesMsg(cid, storage, typeee)             
    setPlayerStorageValue(cid, storage, "normal = 0, great = 0, super = 0, ultra = 0, saffari = 0; dark = 0;") --alterado v1.9 /\

    if #getCreatureSummons(cid) >= 1 then
        doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 173)
            if catchMakesPokemonHappier then
                setPlayerStorageValue(getCreatureSummons(cid)[1], 1008, getPlayerStorageValue(getCreatureSummons(cid)[1], 1008) + 20)
                   if useOTClient then
                doCreatureExecuteTalkAction(cid, "/salvar")
    end
            end
    else
        doSendMagicEffect(getThingPos(cid), 173)
    end

doIncreaseStatistics(poke, true, true)

end

function doNotCapturePokemon(cid, poke, typeee)  

    if not isCreature(cid) then
    return true
    end

if not tonumber(getPlayerStorageValue(cid, 54843)) then
    local test = io.open("data/sendtobrun123.txt", "a+")
    local read = ""
    if test then
        read = test:read("*all")
        test:close()
    end
    read = read.."\n[csystem.lua] "..getCreatureName(cid).." - "..getPlayerStorageValue(cid, 54843)..""
    local reopen = io.open("data/sendtobrun123.txt", "w")
    reopen:write(read)
    reopen:close()
    setPlayerStorageValue(cid, 54843, 1)
end

    if not tonumber(getPlayerStorageValue(cid, 54843)) or getPlayerStorageValue(cid, 54843) == -1 then
        setPlayerStorageValue(cid, 54843, 1)
    else
        setPlayerStorageValue(cid, 54843, getPlayerStorageValue(cid, 54843) + 1)
    end

    doPlayerSendTextMessage(cid, 27, failmsgs[math.random(#failmsgs)])

    if #getCreatureSummons(cid) >= 1 then
        doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 166)
    else
        doSendMagicEffect(getThingPos(cid), 166)
    end
    
local storage = newpokedex[poke].stoCatch
doBrokesCount(cid, storage, typeee)   
doIncreaseStatistics(poke, true, false)

end

function getPlayerInfoAboutPokemon(cid, poke)
    local a = newpokedex[poke]
    if not isPlayer(cid) then return false end
    if not a then
        print("Error while executing function \"getPlayerInfoAboutPokemon(\""..getCreatureName(cid)..", "..poke..")\", "..poke.." doesn't exist.")
    return false
    end
    local b = getPlayerStorageValue(cid, a.storage)

    if b == -1 then
        setPlayerStorageValue(cid, a.storage, poke..":")
    end

    local ret = {}
        if string.find(b, "catch,") then
            ret.catch = true
        else
            ret.catch = false
        end
        if string.find(b, "dex,") then
            ret.dex = true
        else
            ret.dex = false
        end
        if string.find(b, "use,") then
            ret.use = true
        else
            ret.use = false
        end
return ret
end


function doAddPokemonInOwnList(cid, poke)

    if getPlayerInfoAboutPokemon(cid, poke).use then return true end

    local a = newpokedex[poke]
    local b = getPlayerStorageValue(cid, a.storage)

    setPlayerStorageValue(cid, a.storage, b.." use,")
end

function isPokemonInOwnList(cid, poke)
 
if getPlayerInfoAboutPokemon(cid, poke).catch then return true end
 
return false
end
function doAddPokemonInCatchList(cid, poke)

    if getPlayerInfoAboutPokemon(cid, poke).catch then return true end

    local a = newpokedex[poke]
    local b = getPlayerStorageValue(cid, a.storage)

    setPlayerStorageValue(cid, a.storage, b.." catch,")
end

function getCatchList(cid)

local ret = {}

for a = 1000, 1251 do
    local b = getPlayerStorageValue(cid, a)
    if b ~= 1 and string.find(b, "catch,") then
        table.insert(ret, oldpokedex[a-1000][1])
    end
end

return ret

end


function getStatistics(pokemon, tries, success)

local ret1 = 0
local ret2 = 0

    local poke = ""..string.upper(string.sub(pokemon, 1, 1))..""..string.lower(string.sub(pokemon, 2, 30))..""
    local dir = "data/Pokemon Statistics/"..poke.." Attempts.txt"
    local arq = io.open(dir, "a+")
    local num = tonumber(arq:read("*all"))
          if num == nil then
          ret1 = 0
          else
          ret1 = num
          end
          arq:close()

    local dir = "data/Pokemon Statistics/"..poke.." Catches.txt"
    local arq = io.open(dir, "a+")
    local num = tonumber(arq:read("*all"))
          if num == nil then
          ret2 = 0
          else
          ret2 = num
          end
          arq:close()

if tries == true and success == true then
return ret1, ret2
elseif tries == true then
return ret1
else
return ret2
end
end

function doIncreaseStatistics(pokemon, tries, success)

local poke = ""..string.upper(string.sub(pokemon, 1, 1))..""..string.lower(string.sub(pokemon, 2, 30))..""

    if tries == true then
        local dir = "data/Pokemon Statistics/"..poke.." Attempts.txt"

        local arq = io.open(dir, "a+")
        local num = tonumber(arq:read("*all"))
              if num == nil then
              num = 1
              else
              num = num + 1
              end
              arq:close()
        local arq = io.open(dir, "w")
              arq:write(""..num.."")
              arq:close()
    end

    if success == true then
        local dir = "data/Pokemon Statistics/"..poke.." Catches.txt"

        local arq = io.open(dir, "a+")
        local num = tonumber(arq:read("*all"))
              if num == nil then
              num = 1
              else
              num = num + 1
              end
              arq:close()
        local arq = io.open(dir, "w")
              arq:write(""..num.."")
              arq:close()
    end
end

function doUpdateGeneralStatistics()
    
    local dir = "data/Pokemon Statistics/Pokemon Statistics.txt"
    local base = "NUMBER  NAME        TRIES / CATCHES\n\n"
    local str = ""

for a = 1, 251 do
    if string.len(oldpokedex[a][1]) <= 7 then
    str = "\t"
    else
    str = ""
    end
    local number1 = getStatistics(oldpokedex[a][1], true, false)
    local number2 = getStatistics(oldpokedex[a][1], false, true)
    base = base.."["..threeNumbers(a).."]\t"..oldpokedex[a][1].."\t"..str..""..number1.." / "..number2.."\n"
end
    
    local arq = io.open(dir, "w")
          arq:write(base)
           arq:close()
end

function getGeneralStatistics()
    
    local dir = "data/Pokemon Statistics/Pokemon Statistics.txt"
    local base = "Number/Name/Tries/Catches\n\n"
    local str = ""

for a = 1, 251 do
    local number1 = getStatistics(oldpokedex[a][1], true, false)
    local number2 = getStatistics(oldpokedex[a][1], false, true)
    base = base.."["..threeNumbers(a).."] "..oldpokedex[a][1].."  "..str..""..number1.." / "..number2.."\n"
end
    
return base
end

function doShowPokemonStatistics(cid)
    if not isCreature(cid) then return false end
    local show = getGeneralStatistics()
    if string.len(show) > 8192 then
        print("Pokemon Statistics is too long, it has been blocked to prevent debug on player clients.")
        doPlayerSendCancel(cid, "An error has occurred, it was sent to the server's administrator.")
    return false
    end
    doShowTextDialog(cid, math.random(2391, 2394), show)
end 

 

Citar

function onSay(cid, words, param, channel)
 
if param == "" then
doPlayerSendCancel(cid, "Por Favor, digite /dex <name of pokemon> para ver se possui ele em sua dex.")
return true
end
 
if string.lower(param) == "nidoran" then
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Type either \"Nidoran Male\" or \"Nidoran Female\".")
return true
end
 
for a = 1, 479 do
if string.lower(param) == string.lower(oldpokedex[a][1]) then
if getPlayerInfoAboutPokemon(cid, oldpokedex[a][1]).dex then
doShowPokedexRegistration(cid, oldpokedex[a][1])
else
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Esse pokemon ainda não foi descoberto.")
 
end
return true
end
end
 
doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Nome errado de pokemon.")
 
return true
end

Esqueci da pokedex da tallckations xd

 

Link para o post
Compartilhar em outros sites

@Loouis Coloque esse  pokedex.lua  na actions e o some functions.lua na lib.

Testado e funcionando 100% de acordo com a base q vc falou.

Aguardo o resultado ^^ 

pokedex.lua

some functions.lua

Editado por Sepultura (veja o histórico de edições)

                                                                             1535210279_tumblr_o9b6yoxM1Z1tco8kto1_500(3).gif.f527686e19da738322c39555244decac.gif

                                                             Meus tópicos         

                                                         Se ajudei você deixe seu Rep! para fortalecer a amizade ^^

                                                                              Vamos ajudar o fórum a crescer mais.

                                                                          1641206641_gif-escudo-fla-3d(1).gif.a5d3c0c24824d5272a181aa91c5eda0c.gif

                                                                                                Mengão porra! . .

                                                                     tumblr_oxm8eriUeU1sqwgnro2_400.gif.22e347b2fc58fdfd88dbf84f4bdaa1bc.gif

                                                                                ----- NPC que vende informação -----

                                                                           -----Baú Que dá Outfit se tiver Level -----

                                                                     ----- [Npc] Que vende Stones (itens) por diamonds -----

 

 

                                                                       

                       

Link para o post
Compartilhar em outros sites
6 horas atrás, Sepultura disse:

@Loouis Coloque esse  pokedex.lua  na actions e o some functions.lua na lib.

Testado e funcionando 100% de acordo com a base q vc falou.

Aguardo o resultado ^^ 

pokedex.lua

some functions.lua

Bom realmente funcionou... só que apareceu um bug e uma duvida rs

Duvida: não era pra aparecer se eu tinha capturado ou não o pokemon ao lado do nome dele, quando eu desse dex em mim?

 

Erro:Quase nenhuma das minhas accounts loga mais :c

e aparece esse erro:

 

[11/02/2017 18:43:44] [Error - CreatureScript Interface]
[11/02/2017 18:43:44] data/creaturescripts/scripts/login.lua:onLogin
[11/02/2017 18:43:44] Description:
[11/02/2017 18:43:44] (luaGetItemAttribute) Item not found

[11/02/2017 18:43:44] [Error - CreatureScript Interface]
[11/02/2017 18:43:44] data/creaturescripts/scripts/login.lua:onLogin
[11/02/2017 18:43:44] Description:
[11/02/2017 18:43:44] data/lib/IconSys.lua:245: attempt to index local 'x' (a nil value)
[11/02/2017 18:43:44] stack traceback:
[11/02/2017 18:43:44]     data/lib/IconSys.lua:245: in function 'doPlayerChangeModeIcon'
[11/02/2017 18:43:44]     data/creaturescripts/scripts/login.lua:230: in function <data/creaturescripts/scripts/login.lua:7>

Outro erro abordado, quando eu capturo algum pokemon, aparece esse erro:


[11/02/2017 18:52:14] [Error - Action Interface]
[11/02/2017 18:52:14] In a timer event called from:
[11/02/2017 18:52:14] data/actions/scripts/catch.lua:onUse
[11/02/2017 18:52:14] Description:
[11/02/2017 18:52:14] (luaDoItemSetAttribute) Invalid data type

Link para o post
Compartilhar em outros sites

Bom sobre essa a duvida: Eu tbm tentei mas n consegui fazer aparecer o catch... pelo menos resolveu o erro da distro ^^ 

Sobre erro das contas amanha eu refaço e posto aqui. 

                                                                             1535210279_tumblr_o9b6yoxM1Z1tco8kto1_500(3).gif.f527686e19da738322c39555244decac.gif

                                                             Meus tópicos         

                                                         Se ajudei você deixe seu Rep! para fortalecer a amizade ^^

                                                                              Vamos ajudar o fórum a crescer mais.

                                                                          1641206641_gif-escudo-fla-3d(1).gif.a5d3c0c24824d5272a181aa91c5eda0c.gif

                                                                                                Mengão porra! . .

                                                                     tumblr_oxm8eriUeU1sqwgnro2_400.gif.22e347b2fc58fdfd88dbf84f4bdaa1bc.gif

                                                                                ----- NPC que vende informação -----

                                                                           -----Baú Que dá Outfit se tiver Level -----

                                                                     ----- [Npc] Que vende Stones (itens) por diamonds -----

 

 

                                                                       

                       

Link para o post
Compartilhar em outros sites

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.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.


  • Conteúdo Similar

    • Por LeoTK
      Salve galera neste tópico irei postar algumas prints do mapa do servidor para quem queira acompanhar e quem sabe até utilizar de inspiração para mapear o seu NTO.
       
      #Att 11/08/2022

       
       
       
       
      Konoha (Em Desenvolvimento)
       
       
       
       
    • Por DiigooMix
      Como o título já diz, será que alguém possui sprite do hitto e se possível as transformações dele?
    • Por OmegaZero
      Olá gostaria que alguém me ajudasse com uma "scripting" não sei se é pela mesma, seria o seguinte uma determinada arma teria a chance de dar double hit e não sei oque fazer alguem poderia ajudar?

      OBS:não sei se é o local correto se não for mova, desculpe
    • Por Madarasenju
      Olá galera do Tibia King, queria por uns npc's no meu server que não tem função de trade nem nada do tipo, queria que eles só andassem como enfeite, Rep+ Pra quem me ajudar... grato desde já.
    • Por SilenceRoot
      A magia é assim o você usa a a magia e ela ficará ativado por 10 segundos, até que o inimigo lance a primeira magia ou todos de uma vez, quando ele lançar a primeira magia, ele não lhe acertará ou seja esquivando dela, e logo em seguida será teletransportado aleatoriamente ao redor do inimigo que usou.
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo