Postado Fevereiro 10, 2017 8 anos Autor 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 Fevereiro 10, 2017 8 anos por Loouis (veja o histórico de edições)
Postado Fevereiro 11, 2017 8 anos @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 Meus tópicos Se ajudei você deixe seu Rep! para fortalecer a amizade Vamos ajudar o fórum a crescer mais. Mengão porra! . . ----- NPC que vende informação ----- -----Baú Que dá Outfit se tiver Level ----- ----- [Npc] Que vende Stones (itens) por diamonds -----
Postado Fevereiro 11, 2017 8 anos Autor 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
Postado Fevereiro 11, 2017 8 anos @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. Meus tópicos Se ajudei você deixe seu Rep! para fortalecer a amizade Vamos ajudar o fórum a crescer mais. Mengão porra! . . ----- NPC que vende informação ----- -----Baú Que dá Outfit se tiver Level ----- ----- [Npc] Que vende Stones (itens) por diamonds -----
Postado Fevereiro 11, 2017 8 anos Autor 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
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.