Ir para conteúdo

Posts Recomendados

Poderia adaptar minha some functions?? pfv

 

 

 

function addPokeToPlayer(cid, pokemon, level, extStr, gender, boost, ball, unique)             --alterado v2.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
   local level = tonumber(level) and tonumber(level) or pokes[pokemon].level
   local extra = tonumber(extStr) and tonumber(extStr) or 1
   local mypoke = pokes[pokemon]
 
  if (getPlayerFreeCap(cid) <= 1 and not isInArray({3, 2}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then 
      item = doCreateItemEx(11826)
   else
      item = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, 11826, 1)   
   end
   if not item then return false end
   
   local off = mypoke.offense * level * extra
   local def = mypoke.defense * level * extra
   local sp = mypoke.specialattack * level * extra
   local vit = mypoke.vitality * level * extra
   local agi = mypoke.agility * level * extra
   local leveltable = getPokemonExperienceTable(pokemon)
 
   doItemSetAttribute(item, "poke", pokemon)
   doItemSetAttribute(item, "hp", 1)
   
   doItemSetAttribute(item, "level", level)
   doItemSetAttribute(item, "exp", leveltable[level])
   doItemSetAttribute(item, "nextlevelexp", leveltable[level+1] - leveltable[level])
   doItemSetAttribute(item, "offense", off)   
   doItemSetAttribute(item, "defense", def)
   doItemSetAttribute(item, "speed", agi)
   doItemSetAttribute(item, "vitality", vit)
   doItemSetAttribute(item, "specialattack", sp)
   
   doItemSetAttribute(item, "happy", happy)
   doItemSetAttribute(item, "gender", GENDER)
   doSetItemAttribute(item, "hands", 0)
   doItemSetAttribute(item, "description", "Contains a "..pokemon..".")
   doItemSetAttribute(item, "fakedesc", "Contains a "..pokemon..".") 
   if boost and tonumber(boost) and tonumber(boost) > 0 and tonumber(boost) <= 50 then     
      local off = mypoke.offense * boost_rate * tonumber(boost)
      local def = mypoke.defense * boost_rate * tonumber(boost)
      local agi = mypoke.agility * tonumber(boost)
      local spatk = mypoke.specialattack * boost_rate * tonumber(boost)
      local vit = mypoke.vitality * boost_rate * tonumber(boost)
 
      doItemSetAttribute(item, "boost", tonumber(boost))
      doItemSetAttribute(item, "offense", getItemAttribute(item, "offense") + off)
      doItemSetAttribute(item, "defense", getItemAttribute(item, "defense") + def)
      doItemSetAttribute(item, "speed", getItemAttribute(item, "speed") + agi)
      doItemSetAttribute(item, "specialattack", getItemAttribute(item, "specialattack") + spatk)
      doItemSetAttribute(item, "vitality", getItemAttribute(item, "vitality") + vit)
   end                                                                     
   if (getPlayerFreeCap(cid) <= 1 and not isInArray({3, 2}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then 
      doPlayerSendMailByName(getCreatureName(cid), item, 1)
      sendMsgToPlayer(cid, 27, "[Box] You are already holding six pokemons, so your new pokemon was sent to your depot.")
   end
   if (isShinyName(pokemon) or (boost and tonumber(boost) and tonumber(boost) >= 10)) and pokeballs["shiny"..btype] then
      doTransformItem(item, pokeballs["shiny"..btype].off)
       
   else
      doTransformItem(item, pokeballs[btype].off)
      
   end
return true
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 sendMsgToPlayer(cid, tpw, msg)      
if not isCreature(cid) or not tpw or not msg then return true end
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) --alterado v2.8
    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 v2.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[i]) then
                           table.insert(items, itemsbag[i])
                        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 v2.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) then return false end                                             
if not item then return false end
if not num then num = 1 end                                            --alterado v2.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[i]
        horarioComp = string.explode(horarioComparacao, ":")
        ---------------
        if tonumber(horarioComp[1]) > tonumber(horario[1]) then
           return horarioComparacao                                 --alterado v2.3
        elseif tonumber(horarioComp[1]) == tonumber(horario[1]) and tonumber(horario[2]) < tonumber(horarioComp[2]) then
           return horarioComparacao
        end
    end 
    return horas[1]                                  --alterado v2.3
end                                                               
 
function getTimeDiff(timeDiff)
local dateFormat = {
{'hour', timeDiff / 60 / 60}, --6%
{'min', timeDiff / 60 % 60},
}
local out = {}                                   --alterado v2.3
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 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}
    ---                                                                         --alterado v2.3
    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 v2.5
      local str = "cm_move"..c
      setCD(item, str, 0)
   end
end
end
 
function ehNPC(cid)   --alterado v2.9
return isCreature(cid) and not isPlayer(cid) and not isSummon(cid) and not isMonster(cid)
end
 
function ehMonstro(cid)   --alterado v2.9
return cid and cid >= AUTOID_MONSTERS and cid < AUTOID_NPCS and getCreatureMaster(cid) == cid
end                                                     --alterado v2.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 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
pos.stackpos = 253
   pid = getThingfromPos(pos).uid
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) >= 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 getTileInfo(getThingPos(cid)).pvp then
      return "Can" 
   end
   if ehMonstro(cid) and ehMonstro(pid) and not isSummon(cid) and not isSummon(pid) then --alterado v2.9.1
      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 v2.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
setPlayerStorageValue(cid, 547888, -1)  --alterado v2.8
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 v2.5  functions arrumadas...
end
end
 
function doRaiseStatus(cid, off, def, agi, time)  
if not isCreature(cid) then return true end
setPlayerStorageValue(cid, 547888, 1)  --alterado v2.8
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 v2.6
     for i = 2, #summon do
         doSendMagicEffect(getThingPos(summon[i]), 211)
         doRemoveCreature(summon[i])
     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 v2.9
end
 
function isShinyName(name)        
return tostring(name) and string.find(doCorrectString(name), "Shiny") --alterado v2.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"},
["metal"] = {metal, "metal"},
["ice"] = {ice, "ice"},
["Shiny"] = {ice, "Shiny"},
["boost"] = {boostStone, "boost"},  --alterado v2.9
}
 
if string then
return t[type][2]
else
return t[type][1]
end
end
 
function doConvertStoneIdToString(stoneID)
local t = {
[11453] = "Deeph Sea Scale",
[11441] = "Leaf Stone",
[11442] = "Water Stone",
[11443] = "Dusk Stone",
[11444] = "Thunder Stone",
[11445] = "Moon Stone",
[11446] = "Electirizer", 
[11447] = "Fire Stone",               --alterado v2.6
[11448] = "Magmarizer", 
[11449] = "Prism Scale",
[11450] = "Dubious Disc", 
[11451] = "Protector",
[11452] = "Shiny Stone",
[11454] = "Dawn Stone", 
[12244] = "King's Rock",
[12232] = "Metal Coat",
[12242] = "Sun Stone",
[12417] = "Dragon Scale",
[12419] = "Up-Grade",
[13031] = "Punch Machine",
[13032] = "Kick Machine",
[13033] = "Rolling Kick Machine",
[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 v2.9
}
if t[stoneID] then
return t[stoneID]
else
return ""
end
end
 
function isStone(id)
if id >= 11441 and id <= 11454 then
return true
end
if id == 12618 then  --alterado v2.9
return true
end
if id == 12232 or id == 12242 or id == 12244 or id == 12245 then
return true                                  --alterado v2.7 com as stones shinys tb soh pra garantir.. ^^
end
if (id >= 1452 and id <= 1478) or id == 12401 or id == 12402 then
return true 
end
if (id >= 12403 and id <= 12429) or id == 12430 or id == 12432 then
return true 
end
if (id >= 13031 and id <= 13033) or id == 12430 or id == 12432 then
return true 
end
return false
end
 
function isWater(id)
return tonumber(id) and id >= 4820 and id <= 4825 --alterado v2.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 v2.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
str = "He"
elseif getPokemonGender(cid) == SEX_FEMALE then
str = "She"
else
str = "It"
end
local h = getPlayerStorageValue(cid, 1008)
if h >= tonumber(getConfigValue('PokemonStageVeryHappy')) then
str = str.." is very happy with you!"
elseif h >= tonumber(getConfigValue('PokemonStageHappy')) then
str = str.." is happy."
elseif h >= tonumber(getConfigValue('PokemonStageOK')) then
str = str.." is unhappy."
elseif h >= tonumber(getConfigValue('PokemonStageSad')) then
str = str.." is sad."
elseif h >= tonumber(getConfigValue('PokemonStageMad')) then
str = str.." is mad."
else
str = str.." is very mad at you!"
end
return 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, "Ditto")
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")
doItemEraseAttribute(p.uid, "boffense")
doItemEraseAttribute(p.uid, "bdefense")
doItemEraseAttribute(p.uid, "bsattack")
doItemEraseAttribute(p.uid, "bagility")
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, "Shiny Ditto")
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")
doItemEraseAttribute(p.uid, "boffense")
doItemEraseAttribute(p.uid, "bdefense")
doItemEraseAttribute(p.uid, "bsattack")
doItemEraseAttribute(p.uid, "bagility")
end
 
function isTransformed(cid)
return isCreature(cid) and not isInArray({-1, "Ditto", "Shiny Ditto"}, getPlayerStorageValue(cid, 1010))  --alterado v2.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 v2.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 v2.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 v2.8
    end
    --////////////////////////////////////////////////////////////////////////////////////////--
    
    if #getCreatureSummons(cid) > 1 and getPlayerStorageValue(cid, 212124) <= 0 then     --alterado v2.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) == "Shiny 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_ORANGE_1)
 
doSendMagicEffect(getCreaturePosition(pokemon), effect)
 
doRemoveCreature(pokemon)
 
    unLock(pokeball.uid) --alterado v2.8
    
    if useOTClient then
      doPlayerSendCancel(cid, '12//,hide')  --alterado v2.7
    end
    
if useKpdoDlls then
doUpdateMoves(cid)
end
 
end
 
local EFFECTS = {
--[OutfitID] = {Effect}
["Magmar"] = 35,    --magmar            --alterado v2.5
["Magmortar"] = 35,    --magmar
["Jynx"] = 17,    --jynx
["Shiny Jynx"] = 17,    --shiny jynx
["Shiny Magmar"] = 35,    --magmar 
["Shiny Magmortar"] = 35,    --magmar
}
 
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 v2.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) + pokemonMaxLevelAbovePlayer < getItemAttribute(item.uid, "level") then
doPlayerSendCancel(cid, "Your pokemon's level is much higher than yours, you can't use him.")
return true
end
 
    --------------------------------------------------------------------------------------
 
doSummonMonster(cid, pokemon)
 
local pk = getCreatureSummons(cid)[1]
if not isCreature(pk) then return true end
 
------------------------passiva hitmonchan------------------------------
if isSummon(pk) then
       --local e = getCreatureMaster(cid)
       local nameHIT = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "poke")
       local hands = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "hands")
       if nameHIT == "Shiny Hitmonchan" or nameHIT == "Hitmonchan" then
          if getItemAttribute(getPlayerSlotItem(cid, 8).uid, "hands") then
             doSetCreatureOutfit(pk, {lookType = hitmonchans[nameHIT][hands].out}, -1)
          else
              doPlayerSendTextMessage(cid, 27, "Contact a GameMaster! Error in passive system! Attribute \"hands\" missing")  
          end
       end
    end
-------------------------------------------------------------------------
    ---------movement magmar, jynx-------------
    if EFFECTS[getCreatureName(pk)] then   --alterado v2.5  
       markPosEff(pk, getThingPos(pk))
       sendMovementEffect(pk, EFFECTS[getCreatureName(pk)], getThingPos(pk))  --alterado v2.5
    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 getCreatureName(pk) == "Shiny 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, "Shiny 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, false, true)
doAddPokemonInOwnList(cid, pokemon)
 
doTransformItem(item.uid, item.itemid+1)
 
local pokename = getPokeName(pk) --alterado v2.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 v2.8
 
local pk = getCreatureSummons(cid)[1]
local pb = getPlayerSlotItem(cid, 8).uid
local look = getItemAttribute(pb,"addon")
if not look then
doSetItemAttribute(pb,"addon",0)
return false
end
if look > 0 then
doSetCreatureOutfit(pk, {lookType = look}, -1)
return true
end
    
if useKpdoDlls then
doUpdateMoves(cid)
end
end
 
function doRegainSpeed(cid)              --alterado v2.9 \/
if not isCreature(cid) then return true end
 
   local speed = PlayerSpeed
   if isMonster(cid) then
      speed = getCreatureBaseSpeed(cid) + getSpeed(cid) * speedRate 
   elseif isPlayer(cid) and isInArray({4, 5, 6}, getPlayerGroupId(cid)) then
      speed = 200*getPlayerGroupId(cid) 
   end
   if speed > 1500 then speed = 1500 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 v2.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 v2.9
return cid
end
local s = {}
s.x = pos.x
s.y = pos.y
s.z = pos.z                                       --alterado v2.6
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 v2.9 \/
if not item then return false end
for a, b in pairs (pokeballs) do
if isInArray(b.all, item) then return true end
end
return false
end
 
function isPokeball(item)
return isItemPokeball(item)
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                             --alterado v2.7
if isInArray({"Gengar", "Haunter", "Gastly", "Misdreavus", "Shiny Misdreavus", "Mismagius", "Shiny Mismagius", "Shiny Haunter", "Shiny Gastly", "Shiny Gengar", "Darkrai", "Shuppet", "Banette", "Duskull", "Dusclops", "Dusknoir", "Shiny Duskull", "Shiny Dusclops", "Shiny Dusknoir"}, getCreatureName(cid)) then
return true
end
return false
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 v2.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 v2.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 v2.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[b]) < range then
ret = positions[b]
range = getDistanceBetween(getThingPos(cid), positions[b])
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 v2.9
end
 
function isSummon(sid)
return isCreature(sid) and getCreatureMaster(sid) ~= sid and isPlayer(getCreatureMaster(sid))   --alterado v2.9
end 
 
function hasSpaceInContainer(container)                --alterado v2.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 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[i])
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[i])
end
elseif isPokeball(item.itemid) then
table.insert(items, item.uid)
end
end
end
return items
end
 
function getItensUniquesInContainer(container)    --alterado v2.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[i])
          end
       elseif getItemAttribute(item.uid, "unique") then
          table.insert(items, item)
       end
   end
end
return items
end
function getSmeargleMoveTable(master)
  local ball = getPlayerSlotItem(master, 8).uid
  local moves = {}
  local skts = {"skt1", "skt2", "skt3", "skt4", "skt5", "skt6", "skt7", "skt8"}
  for x=1, #skts do
    moves["move"..x] = getItemAttribute(ball, skts[x]) and movestable[getItemAttribute(ball, skts[x])]["move"..x] and movestable[getItemAttribute(ball, skts[x])]["move"..x] ~= -1 and movestable[getItemAttribute(ball, skts[x])]["move"..x] or movestable["Smeargle"]["move"..x]
  end
  return moves
  end
 
function smeargleHaveSpell(cid, spellname)
local has = false
local moves = getSmeargleMoveTable(cid)
 local ball = getPlayerSlotItem(cid, 8).uid
local skts = {"skt1", "skt2", "skt3", "skt4", "skt5", "skt6", "skt7", "skt8"}
for x=1, #skts do
if getItemAttribute(ball, skts[x]) and moves["move"..x].name == spellname then
has = true
break
end
end
return has
end

 

 

 

o meu é com sistema de lvl no pokémon!

Editado por Zet0N0Murmurouu
Link para o comentário
Compartilhar em outros sites

Como faria para um servidor que tem level system? poderia ajudar? ou até mesmo colocar as partes que precisa colocar no some fuctions no tópico ;)

Link para o comentário
Compartilhar em outros sites

  • 3 weeks later...

Aqui funcionou.

 

Mais percebi que ao você atacar e trocar o pokemon para outro e depois voltar para o primeiro pokemon ele terá recarregado os ataques antes do tempo do cooldown. (Exemplo : Usei Charizard ataquei e usei Blastoise se eu usar o Charizard de novo)

 

 

Link para o comentário
Compartilhar em outros sites

manow eu adicionei o sistema e estava funfando 100% mais dai devo ter mexido em alguma coisa que agora n esta funfando o.O olha o erro que dá quando eu tento usar a pokeball para sumonar o poke!

 

[11/07/2015 23:11:40] [Error - Action Interface]
[11/07/2015 23:11:40] data/actions/scripts/goback.lua:onUse
[11/07/2015 23:11:40] Description:
[11/07/2015 23:11:40] data/lib/some functions.lua:1643: attempt to concatenate global 'pokemons' (a nil value)
[11/07/2015 23:11:40] stack traceback:
[11/07/2015 23:11:40] data/lib/some functions.lua:1643: in function 'sendAllPokemonsBarPoke'
[11/07/2015 23:11:40] data/actions/scripts/goback.lua:11: in function <data/actions/scripts/goback.lua:10>
Link para o comentário
Compartilhar em outros sites

Aqui funcionou.

 

Mais percebi que ao você atacar e trocar o pokemon para outro e depois voltar para o primeiro pokemon ele terá recarregado os ataques antes do tempo do cooldown. (Exemplo : Usei Charizard ataquei e usei Blastoise se eu usar o Charizard de novo)

 

 

 

E um erro muito indagado quando eu fiz o sistema más felizmente ele tem uma solução simples.

 

Antes do pokemon for sumonado basta adicionar:

if getCreatureCondition(cid, CONDITION_INFIGHT) == true and #getCreatureSummons(cid) >= 1 then
doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não pode trocar de pokemon durante a batalha.")
return true 
end
Editado por caotic
Link para o comentário
Compartilhar em outros sites

  • 2 weeks later...

Bom, fui testar hoje e coloquei todas as funções corretamente, mas me ocorre o seguinte erro:

[25/07/2015 15:16:14] [Error - TalkAction Interface] 
[25/07/2015 15:16:14] data/talkactions/scripts/move1.lua:onSay
[25/07/2015 15:16:14] Description: 
[25/07/2015 15:16:14] data/lib/034-exhaustion.lua:144: field 'day' missing in date table
[25/07/2015 15:16:14] stack traceback:
[25/07/2015 15:16:14] 	[C]: in function 'time'
[25/07/2015 15:16:14] 	data/lib/034-exhaustion.lua:144: in function 'set'
[25/07/2015 15:16:14] 	data/talkactions/scripts/move1.lua:334: in function <data/talkactions/scripts/move1.lua:37

Alguem poderia me dizer a que ele esta relacionado?

Link para o comentário
Compartilhar em outros sites

  • 1 month later...

o Meu nao tem essa parte

3. Vá na pasta data\lib\cooldown bar.lua

 

Procure por:

endreturn retend

 


function getPlayerPokeballs(cid) --alterado v1.9 \/

local ret = {}
local container = 0
if isCreature(cid) then
container = getPlayerSlotItem(cid, 3).uid
local myball = getPlayerSlotItem(cid, 8)
if myball.uid > 0 then
table.insert(ret, myball)
end
else
container = cid
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 = getPlayerPokeballs(item.uid)
if itemsbag and #itemsbag > 0 then
for i = 0, #itemsbag do
table.insert(ret, itemsbag)
end
end
elseif isPokeball(item.itemid) then
table.insert(ret, item)
end
end
end
return ret
end
function doUpdatePokemonsBar(cid)
if not isCreature(cid) then return true end
if getPlayerStorageValue(cid, 656494) > 0 then
return true
end
setPlayerStorageValue(cid, 656494, 1000)
addEvent(setPlayerStorageValue, 100, cid, 656494, -1)
local ret = {}
table.insert(ret, "p#,")
local balls = getPlayerPokeballs(cid)
local times = 0
for a = 1, #balls do
local item = balls[a]
local hp = math.ceil(getItemAttribute(item.uid, "hp") * 100)
local name = getItemAttribute(item.uid, "poke")
local port = getPlayerSlotItem(cid, CONST_SLOT_LEGS)
if fotos[name] >= 11137 and fotos[name] <= 11387 then
times = times + 1
local foto = fotos[name] - 911
doItemSetAttribute(item.uid, "ballorder", times)
table.insert(ret, foto..","..name..""..times..","..hp..",")
elseif fotos[name] >= 12605 then
times = times + 1
local foto = fotos[name] - 1178 --alterado v1.9
doItemSetAttribute(item.uid, "ballorder", times)
table.insert(ret, foto..","..name..""..times..","..hp..",")
else
times = times + 1
local foto = fotos[name] - 928
doItemSetAttribute(item.uid, "ballorder", times)
table.insert(ret, foto..","..name..""..times..","..hp..",")
end
end
doPlayerSendCancel(cid, table.concat(ret))
end
function getNewMoveTable(table, n)
if table == nil or not n then return false end
local moves = {table.move1, table.move2, table.move3, table.move4, table.move5, table.move6, table.move7, table.move8, table.move9,
table.move10, table.move11, table.move12}
return moves[n] or false
end
function doUpdateMoves(cid)
if not isCreature(cid) then return true end
local summon = getCreatureSummons(cid)[1]
local ret = {}
table.insert(ret, "12&,")
if not summon then
for a = 1, 12 do
table.insert(ret, "n/n,")
end
doPlayerSendCancel(cid, table.concat(ret))
addEvent(doUpdateCooldowns, 100, cid)
return true
end
if isTransformed(summon) then --alterado v1.9
moves = movestable[getPlayerStorageValue(summon, 1010)]
else
moves = getCreatureName(summon) == "Smeargle" and getSmeargleMoveTable(cid) or movestable[getCreatureName(summon)]
end
for a = 1, 12 do
local b = getNewMoveTable(moves, a)
if b then
table.insert(ret, (b.name:find("Sketch") and "Sketch" or b.name)..",")
else
table.insert(ret, "n/n,")
end
end
doPlayerSendCancel(cid, table.concat(ret))
addEvent(doUpdateCooldowns, 100, cid)
end
function doUpdateCooldowns(cid)
if not isCreature(cid) then return true end
local a = getPlayerSlotItem(cid, 8)
local ret = {}
table.insert(ret, "12|,")
if a.uid <= 0 or #getCreatureSummons(cid) <= 0 then
for cds = 1, 12 do
if useOTClient then table.insert(ret, "-1|0,") else table.insert(ret, "-1,") end
end
doPlayerSendCancel(cid, table.concat(ret))
return true
end
for cds = 1, 12 do
----
local summon = getCreatureSummons(cid)[1]
if summon and getPlayerStorageValue(summon, 212123) >= 1 then
cdzin = "cm_move"..cds
else
cdzin = "move"..cds
end
----
if isTransformed(summon) then --alterado v1.9
moves = movestable[getPlayerStorageValue(summon, 1010)]
else
moves = movestable[getCreatureName(summon)]
end
local b = getNewMoveTable(moves, cds)
if not b then
for cds = 1, 12 do
if useOTClient then table.insert(ret, "-1|0,") else table.insert(ret, "-1,") end --alterado v1.9
end
doPlayerSendCancel(cid, table.concat(ret))
return true
end
----
if getCD(a.uid, cdzin) > 0 then
if (useOTClient and b) then table.insert(ret, (getCD(a.uid, cdzin)).."|"..(1)..",") else table.insert(ret, (getCD(a.uid, cdzin))..",") end
else
if (useOTClient and b) then table.insert(ret, "0|"..(1)..",") else table.insert(ret, "0,") end
end
end
doPlayerSendCancel(cid, table.concat(ret))
end
function getBallsAttributes(item)
local t = {"poke", "gender", "nick", "boost", "happy", "hp", "description", "transBegin", "hunger", "transLeft", "transTurn", "transOutfit", "transName",
"trans", "light", "blink", "move1", "move2", "move3", "move4", "move5", "move6", "move7", "move8", "move9", "move10", "move11", "move12", "ballorder",
"hands", "aura", "burn", "burndmg", "poison", "poisondmg", "confuse", "sleep", "miss", "missSpell", "missEff", "fear", "fearSkill", "silence",
"silenceEff", "stun", "stunEff", "stunSpell", "paralyze", "paralyzeEff", "slow", "slowEff", "leech", "leechdmg", "Buff1", "Buff2", "Buff3", "Buff1skill",
"Buff2skill", "Buff3skill", "control", "unique", "task", "lock"}
local ret = {}
for a = 1, #t do
if getItemAttribute(item, t[a]) == "hands" then
return
end
ret[t[a]] = getItemAttribute(item, t[a]) or false
end
return ret
end
function doChangeBalls(cid, item1, item2)
if not isCreature(cid) then return true end
if item1.uid == item2.uid then
if #getCreatureSummons(cid) <= 0 then
doGoPokemon(cid, getPlayerSlotItem(cid, 8))
else
doReturnPokemon(cid, getCreatureSummons(cid)[1], getPlayerSlotItem(cid, 8), pokeballs[getPokeballType(getPlayerSlotItem(cid, 8).itemid)].effect)
end
return true
end
if item1.uid > 0 and item2.uid > 0 then
local io = getBallsAttributes(item1.uid)
local it = getBallsAttributes(item2.uid)
for a, b in pairs (io) do
if b then
doItemSetAttribute(item2.uid, a, b)
else
doItemEraseAttribute(item2.uid, a)
end
end
for a, b in pairs (it) do
if b then
doItemSetAttribute(item1.uid, a, b)
else
doItemEraseAttribute(item1.uid, a)
end
end
local id = item2.itemid
doTransformItem(item2.uid, item1.itemid)
doTransformItem(item1.uid, id)
doGoPokemon(cid, getPlayerSlotItem(cid, 8))
else
local id = item2.itemid
local b = getBallsAttributes(item2.uid)
local a = doPlayerAddItem(cid, 2643, false)
for c, d in pairs (b) do
if d then
doItemSetAttribute(a, c, d)
else
doItemEraseAttribute(a, c)
end
end
doRemoveItem(item2.uid, 1)
doTransformItem(a, id)
doGoPokemon(cid, getPlayerSlotItem(cid, 8))
end
end

Editado por Carlos Henrique PxD
Link para o comentário
Compartilhar em outros sites

  • 1 month later...
  • 3 months later...

Desculpa reviver o tópico, alguém poderia colocar os códigos na minha some fuction ? toda vez que eu coloco da erro, quando eu clico na poke bar para trocar de poke, o poke some da minha bag, vou deixar aqui a minha some fuction para vcs instalarem, Obg. meu Pda tem level system.

 

 

 

function addPokeToPlayer(cid, pokemon, level, extStr, gender, boost, ball, unique)             --alterado v2.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
   local level = tonumber(level) and tonumber(level) or pokes[pokemon].level
   local extra = tonumber(extStr) and tonumber(extStr) or 1
   local mypoke = pokes[pokemon]

  if (getPlayerFreeCap(cid) <= 1 and not isInArray({3, 2}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then 
      item = doCreateItemEx(11826)
   else
      item = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, 11826, 1)   
   end
   if not item then return false end
   
   local off = mypoke.offense * level * extra
   local def = mypoke.defense * level * extra
   local sp = mypoke.specialattack * level * extra
   local vit = mypoke.vitality * level * extra
   local agi = mypoke.agility * level * extra
   local leveltable = getPokemonExperienceTable(pokemon)

   doItemSetAttribute(item, "poke", pokemon)
   doItemSetAttribute(item, "hp", 1)
   
   doItemSetAttribute(item, "level", level)
   doItemSetAttribute(item, "exp", leveltable[level])
   doItemSetAttribute(item, "nextlevelexp", leveltable[level+1] - leveltable[level])
   doItemSetAttribute(item, "offense", off)   
   doItemSetAttribute(item, "defense", def)
   doItemSetAttribute(item, "speed", agi)
   doItemSetAttribute(item, "vitality", vit)
   doItemSetAttribute(item, "specialattack", sp)
   
   doItemSetAttribute(item, "happy", happy)
   doItemSetAttribute(item, "gender", GENDER)
   doSetItemAttribute(item, "hands", 0)
   doItemSetAttribute(item, "description", "Contains a "..pokemon..".")
   doItemSetAttribute(item, "fakedesc", "Contains a "..pokemon..".") 
   if boost and tonumber(boost) and tonumber(boost) > 0 and tonumber(boost) <= 50 then     
      local off = mypoke.offense * boost_rate * tonumber(boost)
      local def = mypoke.defense * boost_rate * tonumber(boost)
      local agi = mypoke.agility * tonumber(boost)
      local spatk = mypoke.specialattack * boost_rate * tonumber(boost)
      local vit = mypoke.vitality * boost_rate * tonumber(boost)

      doItemSetAttribute(item, "boost", tonumber(boost))
      doItemSetAttribute(item, "offense", getItemAttribute(item, "offense") + off)
      doItemSetAttribute(item, "defense", getItemAttribute(item, "defense") + def)
      doItemSetAttribute(item, "speed", getItemAttribute(item, "speed") + agi)
      doItemSetAttribute(item, "specialattack", getItemAttribute(item, "specialattack") + spatk)
      doItemSetAttribute(item, "vitality", getItemAttribute(item, "vitality") + vit)
   end                                                                     
   if (getPlayerFreeCap(cid) <= 1 and not isInArray({3, 2}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then 
      doPlayerSendMailByName(getCreatureName(cid), item, 1)
      sendMsgToPlayer(cid, 27, "[Box] You are already holding six pokemons, so your new pokemon was sent to your depot.")
   end
   if (isShinyName(pokemon) or (boost and tonumber(boost) and tonumber(boost) >= 10)) and pokeballs["shiny"..btype] then
      doTransformItem(item, pokeballs["shiny"..btype].off)
       
   else
      doTransformItem(item, pokeballs[btype].off)
      
   end
return true
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 sendMsgToPlayer(cid, tpw, msg)      
if not isCreature(cid) or not tpw or not msg then return true end
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) --alterado v2.8
    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 v2.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[i]) then
                           table.insert(items, itemsbag[i])
                        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 v2.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) then return false end                                             
if not item then return false end
if not num then num = 1 end                                            --alterado v2.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[i]
        horarioComp = string.explode(horarioComparacao, ":")
        ---------------
        if tonumber(horarioComp[1]) > tonumber(horario[1]) then
           return horarioComparacao                                 --alterado v2.3
        elseif tonumber(horarioComp[1]) == tonumber(horario[1]) and tonumber(horario[2]) < tonumber(horarioComp[2]) then
           return horarioComparacao
        end
    end 
    return horas[1]                                  --alterado v2.3
end                                                               

function getTimeDiff(timeDiff)
local dateFormat = {
{'hour', timeDiff / 60 / 60}, --6%
{'min', timeDiff / 60 % 60},
}
local out = {}                                   --alterado v2.3
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 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}
    ---                                                                         --alterado v2.3
    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 v2.5
      local str = "cm_move"..c
      setCD(item, str, 0)
   end
end
end

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

function ehMonstro(cid)   --alterado v2.9
return cid and cid >= AUTOID_MONSTERS and cid < AUTOID_NPCS and getCreatureMaster(cid) == cid
end                                                     --alterado v2.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)
	if getCreatureName(cid) == "Ditto" and pokes[getPlayerStorageValue(cid, 1010)] and getPlayerStorageValue(cid, 1010) ~= "Ditto" then
       if isSummon(cid) then
          local item = getPlayerSlotItem(getCreatureMaster(cid), 8)
          doSetCreatureOutfit(cid, {lookType = getItemAttribute(item.uid, "transOutfit")}, -1)   --alterado v2.6.1
       end
    end 
end

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)
	if getCreatureName(cid) == "Shiny Ditto" and pokes[getPlayerStorageValue(cid, 1010)] and getPlayerStorageValue(cid, 1010) ~= "Shiny Ditto" then
       if isSummon(cid) then
          local item = getPlayerSlotItem(getCreatureMaster(cid), 8)
          doSetCreatureOutfit(cid, {lookType = getItemAttribute(item.uid, "transOutfit")}, -1)   --alterado v2.6.1
       end
    end 
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
pos.stackpos = 253
   pid = getThingfromPos(pos).uid
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) >= 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 getTileInfo(getThingPos(cid)).pvp then
      return "Can" 
   end
   if ehMonstro(cid) and ehMonstro(pid) and not isSummon(cid) and not isSummon(pid) then --alterado v2.9.1
      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 v2.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
setPlayerStorageValue(cid, 547888, -1)  --alterado v2.8
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 v2.5  functions arrumadas...
end
end

function doRaiseStatus(cid, off, def, agi, time)  
if not isCreature(cid) then return true end
setPlayerStorageValue(cid, 547888, 1)  --alterado v2.8
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 v2.6
     for i = 2, #summon do
         doSendMagicEffect(getThingPos(summon[i]), 211)
         doRemoveCreature(summon[i])
     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 v2.9
end

function isShinyName(name)        
return tostring(name) and string.find(doCorrectString(name), "Shiny") --alterado v2.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"},
["metal"] = {metal, "metal"},
["ice"] = {ice, "ice"},
["Shiny"] = {ice, "Shiny"},
["boost"] = {boostStone, "boost"},  --alterado v2.9
}

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

function doConvertStoneIdToString(stoneID)
local t = {
[11453] = "Deeph Sea Scale",
[11441] = "Leaf Stone",
[11442] = "Water Stone",
[11443] = "Dusk Stone",
[11444] = "Thunder Stone",
[11445] = "Moon Stone",
[11446] = "Electirizer", 
[11447] = "Fire Stone",               --alterado v2.6
[11448] = "Magmarizer", 
[11449] = "Prism Scale",
[11450] = "Dubious Disc", 
[11451] = "Protector",
[11452] = "Shiny Stone",
[11454] = "Dawn Stone", 
[12244] = "King's Rock",
[12232] = "Metal Coat",
[12242] = "Sun Stone",
[12417] = "Dragon Scale",
[12419] = "Up-Grade",
[13031] = "Punch Machine",
[13032] = "Kick Machine",
[13033] = "Rolling Kick Machine",
[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 v2.9
}
if t[stoneID] then
return t[stoneID]
else
return ""
end
end

function isStone(id)
if id >= 11441 and id <= 11454 then
return true
end
if id == 12618 then  --alterado v2.9
return true
end
if id == 12232 or id == 12242 or id == 12244 or id == 12245 then
return true                                  --alterado v2.7 com as stones shinys tb soh pra garantir.. ^^
end
if (id >= 1452 and id <= 1478) or id == 12401 or id == 12402 then
return true 
end
if (id >= 12403 and id <= 12429) or id == 12430 or id == 12432 then
return true 
end
if (id >= 13031 and id <= 13033) or id == 12430 or id == 12432 then
return true 
end
return false
end

function isWater(id)
return tonumber(id) and id >= 4820 and id <= 4825 --alterado v2.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 v2.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
		str = "He"
	elseif getPokemonGender(cid) == SEX_FEMALE then
		str = "She"
	else
		str = "It"
	end
	local h = getPlayerStorageValue(cid, 1008)
	if h >= tonumber(getConfigValue('PokemonStageVeryHappy')) then
		str = str.." is very happy with you!"
	elseif h >= tonumber(getConfigValue('PokemonStageHappy')) then
		str = str.." is happy."
	elseif h >= tonumber(getConfigValue('PokemonStageOK')) then
		str = str.." is unhappy."
	elseif h >= tonumber(getConfigValue('PokemonStageSad')) then
		str = str.." is sad."
	elseif h >= tonumber(getConfigValue('PokemonStageMad')) then
		str = str.." is mad."
	else
		str = str.." is very mad at you!"
	end
return 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, "Ditto")
	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")
	doItemEraseAttribute(p.uid, "boffense")
	doItemEraseAttribute(p.uid, "bdefense")
	doItemEraseAttribute(p.uid, "bsattack")
	doItemEraseAttribute(p.uid, "bagility")
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, "Shiny Ditto")
	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")
	doItemEraseAttribute(p.uid, "boffense")
	doItemEraseAttribute(p.uid, "bdefense")
	doItemEraseAttribute(p.uid, "bsattack")
	doItemEraseAttribute(p.uid, "bagility")
end

function isTransformed(cid)
return isCreature(cid) and not isInArray({-1, "Ditto", "Shiny Ditto"}, getPlayerStorageValue(cid, 1010))  --alterado v2.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 v2.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 v2.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 v2.8
    end
    --////////////////////////////////////////////////////////////////////////////////////////--
    
    if #getCreatureSummons(cid) > 1 and getPlayerStorageValue(cid, 212124) <= 0 then     --alterado v2.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 getCreatureName(pokemon) == "Shiny 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 v2.8
    
    if useOTClient then
       doPlayerSendCancel(cid, '12//,hide')  --alterado v2.7
    end
    
	if useKpdoDlls then
		doUpdateMoves(cid)
	end

end

local EFFECTS = {
	--[OutfitID] = {Effect}
	["Magmar"] = 35,    --magmar            --alterado v2.5
	["Magmortar"] = 35,    --magmar
	["Jynx"] = 17,    --jynx
	["Shiny Jynx"] = 17,    --shiny jynx
	["Shiny Magmar"] = 35,    --magmar 
	["Shiny Magmortar"] = 35,    --magmar
}

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 v2.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) + pokemonMaxLevelAbovePlayer < getItemAttribute(item.uid, "level") then
	doPlayerSendCancel(cid, "Your pokemon's level is much higher than yours, you can't use him.")
	return true
	end
	
    --------------------------------------------------------------------------------------

	doSummonMonster(cid, pokemon)

	local pk = getCreatureSummons(cid)[1]
	if not isCreature(pk) then return true end
	
	------------------------passiva hitmonchan------------------------------
	if isSummon(pk) then
       --local e = getCreatureMaster(cid)
       local nameHIT = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "poke")
       local hands = getItemAttribute(getPlayerSlotItem(cid, 8).uid, "hands")
       if nameHIT == "Shiny Hitmonchan" or nameHIT == "Hitmonchan" then
          if getItemAttribute(getPlayerSlotItem(cid, 8).uid, "hands") then
             doSetCreatureOutfit(pk, {lookType = hitmonchans[nameHIT][hands].out}, -1)
          else
              doPlayerSendTextMessage(cid, 27, "Contact a GameMaster! Error in passive system! Attribute \"hands\" missing")  
          end
       end
    end
	-------------------------------------------------------------------------
    ---------movement magmar, jynx-------------
    if EFFECTS[getCreatureName(pk)] then   --alterado v2.5  
       markPosEff(pk, getThingPos(pk))
       sendMovementEffect(pk, EFFECTS[getCreatureName(pk)], getThingPos(pk))  --alterado v2.5
    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 getCreatureName(pk) == "Shiny 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, "Shiny 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, false, true)
	doAddPokemonInOwnList(cid, pokemon)

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

	local pokename = getPokeName(pk) --alterado v2.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 v2.8
    
	if useKpdoDlls then
		doUpdateMoves(cid)
	end
end

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

   local speed = PlayerSpeed
   if isMonster(cid) then
      speed = getCreatureBaseSpeed(cid) + getSpeed(cid) * speedRate 
   elseif isPlayer(cid) and isInArray({4, 5, 6}, getPlayerGroupId(cid)) then
      speed = 200*getPlayerGroupId(cid) 
   end
   if speed > 1500 then speed = 1500 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 v2.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 v2.9
	return cid
	end
	local s = {}
	s.x = pos.x
	s.y = pos.y
	s.z = pos.z                                       --alterado v2.6
		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 v2.9 \/
if not item then return false end
for a, b in pairs (pokeballs) do
	if isInArray(b.all, item) then return true end
end
return false
end

function isPokeball(item)
return isItemPokeball(item)
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                             --alterado v2.7
	if isInArray({"Gengar", "Haunter", "Gastly", "Misdreavus", "Shiny Misdreavus", "Mismagius", "Shiny Mismagius", "Shiny Haunter", "Shiny Gastly", "Shiny Gengar", "Darkrai", "Shuppet", "Banette", "Duskull", "Dusclops", "Dusknoir", "Shiny Duskull", "Shiny Dusclops", "Shiny Dusknoir"}, getCreatureName(cid)) then
	return true
	end
return false
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 v2.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 v2.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 v2.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[b]) < range then
					ret = positions[b]
					range = getDistanceBetween(getThingPos(cid), positions[b])
				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 v2.9
end

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

function hasSpaceInContainer(container)                --alterado v2.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 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[i])
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[i])
					end
				elseif isPokeball(item.itemid) then
					table.insert(items, item.uid)
				end
		end
	end
return items
end

function getItensUniquesInContainer(container)    --alterado v2.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[i])
          end
       elseif getItemAttribute(item.uid, "unique") then
          table.insert(items, item)
       end
   end
end
return items
end

 

 

Editado por ricardoberg
Link para o comentário
Compartilhar em outros sites

  • 2 years later...
  • 11 months later...
Em 15/03/2014 em 19:37, Soulviling disse:

Colocando pokebar (a barrinha que troca de pokemon) no seu pda sem level. Se quiser que eu faça com pda com level comentem ai.

 

 

  Mostrar conteúdo oculto

 

 

140430051409227784.jpg

 

 

 

 

 

 

PDA SEM LEVEL

1. Vá na pasta data\actions\scripts\goback.lua

e embaixo da parte:


function onUse(cid, item, frompos, item2, topos)

coloque:


sendAllPokemonsBarPoke(cid)

2. Vá na pasta data\lib\catch system.lua

Procure por:


setPlayerStorageValue(cid, 854788, 'done')        end

e embaixo coloque:


sendAllPokemonsBarPoke(cid)

3. Vá na pasta data\lib\cooldown bar.lua

 

Procure por:


endreturn retend

e embaixo coloque:

 

  Mostrar conteúdo oculto

 

 

 



function doUpdatePokemonsBar(cid)if not isCreature(cid) then return true endif getPlayerStorageValue(cid, 656494) > 0 thenreturn trueendsetPlayerStorageValue(cid, 656494, 1000)addEvent(setPlayerStorageValue, 100, cid, 656494, -1)local ret = {}table.insert(ret, "p#,")local balls = getPlayerPokeballs(cid)local times = 0for a = 1, #balls do    local item = balls[a]    local hp = math.ceil(getItemAttribute(item.uid, "hp") * 100)    local name = getItemAttribute(item.uid, "poke")    local port = getPlayerSlotItem(cid, CONST_SLOT_LEGS)     if fotos[name] >= 11137 and fotos[name] <= 11387 then       times = times + 1       local foto = fotos[name] - 911       doItemSetAttribute(item.uid, "ballorder", times)       table.insert(ret, foto..","..name..""..times..","..hp..",")                    elseif fotos[name] >= 12605 then                                                  times = times + 1                                                             local foto = fotos[name] - 1178  --alterado v1.9        doItemSetAttribute(item.uid, "ballorder", times)       table.insert(ret, foto..","..name..""..times..","..hp..",")    else       times = times + 1       local foto = fotos[name] - 928       doItemSetAttribute(item.uid, "ballorder", times)       table.insert(ret, foto..","..name..""..times..","..hp..",")    endenddoPlayerSendCancel(cid, table.concat(ret))end

 

 

 

4. Vá na pasta data\lib\some functions.lua

Troque por esse:

 

  Ocultar conteúdo

 



function addPokeToPlayer(cid, pokemon, boost, gender, ball, unique, level)             --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 endsendAllPokemonsBarPoke(cid)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 (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then       item = doCreateItemEx(11826)   else      item = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, 11826, 1)      end   if not item then return false end   doItemSetAttribute(item, "poke", pokemon)   doItemSetAttribute(item, "hp", 1)   doItemSetAttribute(item, "level", level and level or 1)   doItemSetAttribute(item, "happy", happy)   doItemSetAttribute(item, "gender", GENDER)   doSetItemAttribute(item, "hands", 0)   doItemSetAttribute(item, "description", "Contains a "..pokemon..".")   doItemSetAttribute(item, "fakedesc", "Contains a "..pokemon..".")    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   if (isShinyName(pokemon) or (boost and tonumber(boost) and tonumber(boost) >= 10)) and pokeballs["shiny"..btype] then      doTransformItem(item, pokeballs["shiny"..btype].on)   else      doTransformItem(item, pokeballs[btype].on)   endif getPlayerGroupId(cid) > 4 thenlocal shinys = {"Venusaur", "Charizard", "Blastoise", "Butterfree", "Beedrill", "Pidgeot", "Rattata", "Raticate", "Raichu", "Zubat", "Golbat", "Paras", "Parasect", "Venonat", "Venomoth", "Growlithe", "Arcanine", "Abra", "Alakazam", "Tentacool", "Tentacruel", "Farfetch'd", "Grimer", "Muk", "Gengar", "Onix", "Krabby", "Kingler", "Voltorb", "Electrode", "Cubone", "Marowak", "Hitmonlee", "Hitmonchan", "Tangela", "Horsea", "Seadra", "Scyther", "Jynx", "Electabuzz", "Pinsir", "Magikarp", "Gyarados", "Snorlax", "Dragonair", "Dratini", "Dragonite"}if isInArray(shinys, pokemon) then           sendMsgToPlayer(cid, 27, "Transform Poke In Shiny")           tranfBallInShiny(item)          endendsendAllPokemonsBarPoke(cid)return trueend ---------------------------function unLock(ball)                                                             if not ball or ball <= 0 then return false endif 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   endendreturn falseendfunction getGuildMembersOnline(GuildId)local players = {}for _, pid in pairs(getPlayersOnline()) do    if getPlayerGuildId(pid) == tonumber(GuildId) then       table.insert(players, pid)    endend                                                   --by Vodkartreturn #players > 0 and players or falseendfunction 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()endreturn #players > 0 and players or falseend --/////////////////////////////////////////////////////////////////////////////////---function sendMsgToPlayer(cid, tpw, msg)      --alterado v1.7 \/\/\/if not isCreature(cid) or not tpw or not msg then return true endreturn doPlayerSendTextMessage(cid, tpw, msg)endfunction getPlayerDesc(cid, thing, TV)if (not isCreature(cid) or not isCreature(thing)) and not TV then return "" endlocal 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))..".")endif getPlayerGuildId(thing) > 0 then   table.insert(str, " "..art.." "..getPlayerGuildRank(thing).." from the "..getPlayerGuildName(thing)..".")endif TV then   table.insert(str, " "..art.." watching TV.")endtable.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 getPokemonLevelByPokemon(pk)if isSummon(pk) thenlocal cid = getCreatureMaster(pk)if cid thenlocal ball = getPlayerSlotItem(cid, 8)if ball.uid ~= 0 thenreturn getItemAttribute(ball.uid, "level") or 1endendendreturn falseendfunction addValuePokeLevel(level, value)if tonumber(level) thenvalue = value/100value = value*levelreturn valueendreturn falseendfunction 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[i]) then                           table.insert(items, itemsbag[i])                        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	endreturn itemsendfunction 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.1if 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   endendreturn falseend------------------------------------------------------------------------------------------------------function pokeHaveReflect(cid)if not isCreature(cid) then return false endlocal table = getTableMove(cid, "Reflect")if table and table.name then     --alterado v1.6   return true endreturn falseend------------------------------------------------------------------------------------------------------function nextHorario(cid)    horarioAtual = os.date("%X")    horario = string.explode(horarioAtual, ":")        for i = 1, #horas do        horarioComparacao = horas[i]        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"))    endendif tonumber(dateFormat[1][2]) == 0 and tonumber(dateFormat[2][2]) == 0 then   return "seconds"endreturn table.concat(out)endfunction 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"))    endendreturn 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)    endreturn 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)   endendendfunction ehNPC(cid)   --alterado v1.9return isCreature(cid) and not isPlayer(cid) and not isSummon(cid) and not isMonster(cid)endfunction ehMonstro(cid)   --alterado v1.9return cid and cid >= AUTOID_MONSTERS and cid < AUTOID_NPCSendfunction 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)	if getCreatureName(cid) == "Ditto" and pokes[getPlayerStorageValue(cid, 1010)] and getPlayerStorageValue(cid, 1010) ~= "Ditto" then       if isSummon(cid) then          local item = getPlayerSlotItem(getCreatureMaster(cid), 8)          doSetCreatureOutfit(cid, {lookType = getItemAttribute(item.uid, "transOutfit")}, -1)   --alterado v1.6.1       end    end endfunction doDisapear(cid)   --Faz um pokemon ficar invisivelif not isCreature(cid) then return true enddoCreatureAddCondition(cid, permanentinvisible)doCreatureSetHideHealth(cid, true)doSetCreatureOutfit(cid, {lookType = 2}, -1)endfunction hasTile(pos)    --Verifica se tem TILE na pospos.stackpos = 0if getTileThingByPos(pos).itemid >= 1 then   return trueendreturn falseendfunction getThingFromPosWithProtect(pos)  --Pega uma creatura numa posiçao com proteçoesif hasTile(pos) then   if isCreature(getRecorderCreature(pos)) then      return getRecorderCreature(pos)   else      pos.stackpos = 253      pid = getThingfromPos(pos).uid   endelse   pid = getThingfromPos({x=1,y=1,z=10,stackpos=253}).uidendreturn pidendfunction getTileThingWithProtect(pos)    --Pega um TILE com proteçoesif hasTile(pos) thenpos.stackpos = 0   pid = getTileThingByPos(pos)else   pid = getTileThingByPos({x=1,y=1,z=10,stackpos=0})endreturn pidendfunction canAttackOther(cid, pid)         --Function q verifica se um poke/player pode atacar outro poke/playerif not isCreature(cid) or not isCreature(pid) then return "Cant" endlocal master1 = isSummon(cid) and getCreatureMaster(cid) or cidlocal 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) or ehMonstro(pid) then      return "Can"   endreturn "Cant"end         function stopNow(cid, time)    --function q faz o poke/player ficar imovel por um tempoif not isCreature(cid) or not tonumber(time) or isSleeping(cid) then return true endlocal function podeMover(cid)                         --alterado v1.9 \/if isCreature(cid) then mayNotMove(cid, false) endendmayNotMove(cid, true)addEvent(podeMover, time, cid)endfunction doReduceStatus(cid, off, def, agi)   --reduz os statusif not isCreature(cid) then return true endlocal A = getOffense(cid)local B = getDefense(cid)local C = getSpeed(cid)if off > 0 then   setPlayerStorageValue(cid, 1001, A - off)endif def > 0 then   setPlayerStorageValue(cid, 1002, B - def)endif agi > 0 then   setPlayerStorageValue(cid, 1003, C - agi)   if getCreatureSpeed(cid) ~= 0 then      doRegainSpeed(cid)   end                                              --alterado v1.5  functions arrumadas...endendfunction doRaiseStatus(cid, off, def, agi, time)  if not isCreature(cid) then return true endlocal A = getOffense(cid)local B = getDefense(cid)local C = getSpeed(cid)if off > 0 then   setPlayerStorageValue(cid, 1001, A * off)endif def > 0 then   setPlayerStorageValue(cid, 1002, B * def)endif agi > 0 then   setPlayerStorageValue(cid, 1003, C + agi)   if getCreatureSpeed(cid) ~= 0 then      doRegainSpeed(cid)   endendlocal D = getOffense(cid)local E = getDefense(cid)local F = getSpeed(cid)---------------------------local G = D - Alocal H = E - Blocal I = F - CaddEvent(doReduceStatus, time*1000, cid, G, H, I)endfunction BackTeam(cid)            if isCreature(cid) then     local summon = getCreatureSummons(cid)   --alterado v1.6     for i = 2, #summon do         doSendMagicEffect(getThingPos(summon[i]), 211)         doRemoveCreature(summon[i])     end     setPlayerStorageValue(cid, 637501, -1)  end  end    function choose(...) -- by mock    local arg = {...}    return arg[math.random(1,#arg)]endfunction AddPremium(cid, days)local function removerPlayer(cid)if isCreature(cid) then   doRemoveCreature(cid)endenddb.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 TRUEendfunction isShiny(cid) return isCreature(cid) and string.find(getCreatureName(cid), "Shiny")  --alterado v1.9endfunction isShinyName(name)        return tostring(name) and string.find(doCorrectString(name), "Shiny") --alterado v1.9endfunction 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"},["metal"] = {metal, "metal"},["ice"] = {ice, "ice"},["boost"] = {boostStone, "boost"},  --alterado v1.9}if string thenreturn t[type][2]elsereturn t[type][1]endendfunction 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] = "King's Rock",[12232] = "Metal Stone",[12242] = "Sun 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] thenreturn t[stoneID]elsereturn ""endendfunction isStone(id)if id >= leaf and id <= ice thenreturn trueendif id == boostStone then  --alterado v1.9return trueendif id == 12232 or id == 12242 or id == 12244 or id == 12245 thenreturn true                                 endif (id >= sfire and id <= searth) or id == 12417 or id == 12419 thenreturn true endreturn falseendfunction isWater(id)return tonumber(id) and id >= 4820 and id <= 4825 --alterado v1.9endfunction getTopCorpse(position)local pos = positionfor 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)    endendreturn nullendbpslot = CONST_SLOT_BACKPACKfunction 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	endreturn falseendfunction isNpcSummon(cid)return isNpc(getCreatureMaster(cid))endfunction 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!")	endreturn table.concat(str)endfunction doSetItemAttribute(item, key, value)doItemSetAttribute(item, key, value)endfunction 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)endfunction isTransformed(cid)return isCreature(cid) and not isInArray({-1, "Ditto", "Shiny Ditto"}, getPlayerStorageValue(cid, 1010))  --alterado v1.9endfunction doSendFlareEffect(pos)	local random = {28, 29, 79}	doSendMagicEffect(pos, random[math.random(1, 3)])endfunction isDay()	local a = getWorldTime()	if a >= 360 and a < 1080 then	return true	endreturn falseendfunction 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)	endendfunction 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	endendfunction doCorrectPokemonName(poke)return doCorrectString(poke)endfunction doCorrectString(str)local name = str:explode(" ")  --alterado v1.9local final = {}for _, s in ipairs(name) do    table.insert(final, s:sub(1, 1):upper()..s:sub(2, #s):lower())endreturn 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	endreturn 1endfunction 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)		endendfunction doReturnPokemon(cid, pokemon, pokeball, effect, hideeffects, blockevo)    -----------------	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)                doCloseInfoPoke(cid)    unLock(pokeball.uid) --alterado v1.8        if useOTClient then       doPlayerSendCancel(cid, '12//,hide')  --alterado v1.7    end    	if useKpdoDlls then		doUpdateMoves(cid)	endendlocal EFFECTS = {  --[OutfitID] = {Effect}  ["Magmar"] = 35,    --magmar            --alterado v2.5  ["Magmortar"] = 35,    --magmar      ["Jynx"] = 17,    --jynx  ["Shiny Jynx"] = 17,    --shiny jynx  ["Piloswine"] = 210,    --piloswine  ["Swinub"] = 210,    --swinub}function doGoPokemon(cid, item)sendAllPokemonsBarPoke(cid)	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   endif #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)             if not getItemAttribute(item.uid, "level") then             doSetItemAttribute(item.uid, "level", 1)          end	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)                sendAudio(cid, "006")                sendPokeInfo(cid)	doSendMagicEffect(getCreaturePosition(pk), effect)    unLock(item.uid) --alterado v1.8	if useKpdoDlls then		doUpdateMoves(cid)	endendfunction 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 speedendfunction 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	endreturn trueendfunction 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	endreturn genderendfunction 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		endreturn retendfunction 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		endreturn retendfunction doCreatureSetOutfit(cid, outfit, time)	doSetCreatureOutfit(cid, outfit, time)endfunction 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	endend		function isItemPokeball(item)         --alterado v1.9 \/if not item then return false endfor a, b in pairs (pokeballs) do	if isInArray(b.all, item) then return true endendreturn falseendfunction isPokeball(item)return isItemPokeball(item)end                                    --/\function getPokeballType(id)	for a, b in pairs (pokeballs) do		if isInArray(b.all, id) then			return a		end	endreturn "none"endrandomdiagonaldir = {[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])endfunction 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)endfunction getFaceOpposite(dir)local d = {[NORTH] = SOUTH,[SOUTH] = NORTH,[EAST] = WEST,[WEST] = EAST,[NORTHEAST] = SOUTHWEST,[NORTHWEST] = SOUTHEAST,[SOUTHEAST] = NORTHWEST,[SOUTHWEST] = NORTHEAST}return d[dir]endfunction getResistance(cid, combat)	if isPlayer(cid) then return false endlocal poketype1 = pokes[getCreatureName(cid)].typelocal poketype2 = pokes[getCreatureName(cid)].type2local 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	endreturn multiplierendfunction 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		endendfunction getSomeoneDescription(cid)	if isPlayer(cid) then return getPlayerNameDescription(cid) endreturn getMonsterInfo(getCreatureName(cid)).descriptionend	function isGhostPokemon(cid)  if not isCreature(cid) then return false end                             --alterado v2.7  if isInArray({"Mismagius", "Dusknoir", "Sableye" , "Shuppet" , "Banette" , "Duskull" , "Dusclops" , "Gengar", "Haunter", "Gastly", "Misdreavus", "Shiny Gengar", "Shiny Abra", "Ghost Marowak"}, getCreatureName(cid)) then  return true  endreturn falseendfunction 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 trueendfunction doRemoveElementFromTable(t, e)	local ret = {}	for a = 1, #t do		if t[a] ~= e then		table.insert(ret, t[a])		end	endreturn retendfunction 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)		enddoCreatureSetLookDir(sid, ret)doChangeSpeed(sid, -1)return trueendfunction doCreatureAddCondition(cid, condition)if not isCreature(cid) then return true enddoAddCondition(cid, condition)endfunction doCreatureRemoveCondition(cid, condition)if not isCreature(cid) then return true enddoRemoveCondition(cid, condition)endfunction 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()endfunction 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	endreturn numberendfunction doSendMoveEffect(cid, target, effect)if not isCreature(cid) or not isCreature(target) then return true enddoSendDistanceShoot(getThingPos(cid), getThingPos(target), effect)return trueendfunction doSetItemActionId(uid, actionid)doItemSetAttribute(uid, "aid", actionid)return trueendfunction threeNumbers(number)	if number <= 9 then	return "00"..number..""	elseif number <= 99 then	return "0"..number..""	endreturn ""..number..""endfunction isBr(cid)if getPlayerStorageValue(cid, 105505) ~= -1 thenreturn trueendreturn falseendfunction isBeingUsed(ball)            if not ball then return false endfor a, b in pairs (pokeballs) do           --alterado v1.9    if b.use == ball then return true endendreturn falseendfunction doRemoveTile(pos)-- Script by mockpos.stackpos = 0local sqm = getTileThingByPos(pos)doRemoveItem(sqm.uid,1)endfunction doCreateTile(id,pos) -- By mockdoAreaCombatHealth(0,0,pos,0,0,0,CONST_ME_NONE)doCreateItem(id,1,pos)endfunction hasSqm(pos)local f = getTileThingByPos(pos)if f.itemid ~= 0 and f.itemid ~= 1 thenreturn trueendreturn falseendfunction getPosDirs(p, dir) -- By MatheusMkaloreturn 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}endfunction canWalkOnPos(pos, creature, pz, water, sqm, proj)if not pos then return false endif not pos.x then return false endif getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid <= 1 and sqm then return false endif getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 919 then return false endif 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 endif getTopCreature(pos).uid > 0 and creature then return false endif 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 trueendfunction canWalkOnPos2(pos, creature, pz, water, sqm, proj)     --alterado v1.6if not pos then return false endif not pos.x then return false endif getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid <= 1 and sqm then return false endif getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 919 then return false endif 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 endif getTopCreature(pos).uid > 0 and creature then return false endif 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 trueendfunction 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[b]) < range then					ret = positions[b]					range = getDistanceBetween(getThingPos(cid), positions[b])				end			end			return ret		else			return positions[math.random(#positions)]		end	endreturn getThingPos(cid)endfunction 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 trueendfunction isPlayerSummon(cid, uid)return getCreatureMaster(uid) == cid  --alterado v1.9endfunction isSummon(sid)return isCreature(sid) and getCreatureMaster(sid) ~= sid and isPlayer(getCreatureMaster(sid))   --alterado v1.9end function getItemsInContainerById(container, itemid) -- Function By Kydrailocal 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[i])          end       else          if itemid == item.itemid then             table.insert(items, item.uid)          end       end   endendreturn itemsendfunction 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[i])					end				elseif isPokeball(item.itemid) then					table.insert(items, item.uid)				end		end	endreturn itemsendfunction getItensUniquesInContainer(container)    --alterado v1.6if not isContainer(container) then return {} endlocal 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[i])          end       elseif getItemAttribute(item.uid, "unique") then          table.insert(items, item)       end   endendreturn itemsendfunction hasSpaceInContainer(container)                --alterado v1.6if not isContainer(container) then return false endif getContainerSize(container) < getContainerCap(container) then return true endfor slot = 0, (getContainerSize(container)-1) do    local item = getContainerItem(container, slot)    if isContainer(item.uid) then       if hasSpaceInContainer(item.uid) then          return true       end    endendreturn falseendfunction doPlayerAddItemStacking(cid, itemid, quant) -- by mkalolocal item = getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, itemid)local piles = 0if #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   endelse   return doPlayerAddItem(cid, itemid, quant)endif piles == #item then   doPlayerAddItem(cid, itemid, quant)endendfunction createBallByStatus(cid, status, id)slot = getPlayerSlotItem(cid, 8)if slot.uid == 0 thenitem = doPlayerAddItem(cid, id) elseitem = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, id, 1)endsetStatusPokeballByStatusStr(item, status)endfunction getPokemonByName(cid, pokemon)local arraypoke = {}local container = getPlayerSlotItem(cid, 3).uidlocal pokeballs = getPokeballsInContainer(container) for i =1, #pokeballs doname = getItemAttribute(pokeballs[i], "poke") if pokemon == name thentable.insert(arraypoke, pokeballs[i])return arraypoke[1]endendreturn falseendfunction tranfBallInShiny(pokeball)doItemSetAttribute(pokeball, "shiny", "shiny")return trueendfunction getShinyByPokeball(pokeball)local shiny = getItemAttribute(pokeball, "shiny") return shiny == "shiny" and true or falseendfunction getShinyNameByPokeball(pokeball)local shiny = getItemAttribute(pokeball, "shiny") return shiny and "Shiny "..getItemAttribute(pokeball, "poke").."" or getItemAttribute(pokeball, "poke")endfunction setStatusPokeballByStatusStr(pokeball, status)local attr = string.explode(status, ",")local x = {"poke", "hp", "offense", "defense", "speed", "vitality", "specialattack", "happy", "gender", "hands", "description", "fakedesc", "boost", "ball", "defeated", "shiny", "level"}for i =1, #attr dodoItemSetAttribute(pokeball, x[i], attr[i])endendfunction copieAllStatusBalls(pokeball)local x = {"poke", "hp", "offense", "defense", "speed", "vitality", "specialattack", "happy", "gender", "hands", "description", "fakedesc", "boost", "ball", "defeated", "shiny", "level"}str = ""sep = ","for i =1, #x dolocal attr = getItemAttribute(pokeball, x[i]) or 0local t = attr ..sepstr = str..tendreturn str endfunction atualizaPokes(cid)local item = getPlayerSlotItem(cid, 8)if item.uid <= 0 then return true endif not getItemAttribute(item.uid, "poke") thenreturn trueend    for i, x in pairs(fotos) doif string.lower(getItemAttribute(item.uid, "poke")) == string.lower(i) thendoTransformItem(getPlayerSlotItem(cid, 7).uid, fotos[i])if useOTClient thendoPlayerSendCancel(cid, '12//,show')endif useKpdoDlls thendoUpdateMoves(cid)endendendendfunction doSendPokemon(cid, pokemon)if getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 17001) >= 1 or getPlayerStorageValue(cid, 63215) >= 1 or getPlayerStorageValue(cid, 75846) >= 1 or getPlayerStorageValue(cid, 5700) >= 1  then    --alterado v1.9 <<return true                                                                                                                        endif exhaustion.get(cid, 6666) and exhaustion.get(cid, 6666) > 0 then return true endif #getCreatureSummons(cid) > 1 and getPlayerStorageValue(cid, 212124) <= 0 then     --alterado v1.6if getPlayerStorageValue(cid, 637501) == -2 or getPlayerStorageValue(cid, 637501) >= 1 then  BackTeam(cid)       endend   if #getCreatureSummons(cid) > 0 thent = getPlayerSlotItem(cid, 8)local btype = getPokeballType(t.itemid)local effect = pokeballs[btype].effect or 21	doReturnPokemon(cid, getCreatureSummons(cid)[1], t,effect)endt = getPlayerSlotItem(cid, 8)if t.uid ~= 0 thenpokeslot = getItemAttribute(t.uid, "poke") if pokeslot == pokemon thent = getPlayerSlotItem(cid, 8)doGoPokemon(cid, t)atualizaPokes(cid)return trueendif getPokemonByName(cid, pokemon) thenlocal poke = getPokemonByName(cid, pokemon)local attr = copieAllStatusBalls(t.uid)local id = t.itemiddoRemoveItem(t.uid)local attr2 = copieAllStatusBalls(poke)local id2 = getThing(poke).itemiddoRemoveItem(getPokemonByName(cid, pokemon))createBallByStatus(cid, attr2, id2)createBallByStatus(cid, attr, id)t = getPlayerSlotItem(cid, 8)doGoPokemon(cid, t)atualizaPokes(cid)return trueendendif getPokemonByName(cid, pokemon) thenlocal id = getThing(getPokemonByName(cid, pokemon)).itemidlocal attr = copieAllStatusBalls(getPokemonByName(cid, pokemon))doRemoveItem(getPokemonByName(cid, pokemon))createBallByStatus(cid, attr, id)t = getPlayerSlotItem(cid, 8)doGoPokemon(cid, t)atualizaPokes(cid)return trueendreturn falseendfunction sendPokeInfo(cid)local activeimg = truelocal poke = getPlayerSlotItem(cid, 8)local pokeslot = getItemAttribute(poke.uid, "poke") local pokeboost = getItemAttribute(poke.uid, "boost") or 0local pokehappy = getPlayerStorageValue(getCreatureSummons(cid)[1], 1008) or 1 doPlayerSendCancel(cid, "NewInfo/"..pokeslot.."/"..pokeboost.."/"..pokehappy.."")if activeimg thenlocal img = "ShowPoke/"doPlayerSendCancel(cid, img..pokeslot)endendfunction sendAudio(cid, audio)local function getSpectatorsFromArea(fromPosition, toPosition, multifloor)    local lenght = ((math.max(fromPosition.x, toPosition.x) - math.min(fromPosition.x, toPosition.x)) * 0.5) + 1    local width = ((math.max(fromPosition.y, toPosition.y) - math.min(fromPosition.y, toPosition.y)) * 0.5) + 1    if multifloor == true then        local ret = {}        for f = math.min(fromPosition.z, toPosition.z), math.max(fromPosition.z, toPosition.z) do            local tmp = getSpectators({x = math.min(fromPosition.x, toPosition.x) + lenght, y = math.min(fromPosition.y, toPosition.y) + width, z = f}, lenght, width, false)            for k = 1, #tmp dotable.insert(ret, tmp[k])end        end        return ret    end    return getSpectators({x = math.min(fromPosition.x, toPosition.x) + lenght, y = math.min(fromPosition.y, toPosition.y) + width, z = fromPosition.z}, lenght, width, false)endlocal pos = getThingPos(cid)local pos = getThingPos(cid)local t = 5local pos1 = {x = pos.x-t, y = pos.y-t, z = pos.z}local pos2 = {x = pos.x+t, y = pos.y+t, z = pos.z}for _, pid in pairs(getSpectatorsFromArea(pos1, pos2, true)) doif isPlayer(pid) thendoPlayerSendCancel(pid, "Audio "..audio.."")endendendfunction doShowSelectChar(cid)doPlayerSendCancel(cid, "ShowChar")endfunction doCloseSelectChar(cid)doPlayerSendCancel(cid, "CloseChar")endfunction doShowLookPlayer(cid, target, msg)doPlayerSendCancel(cid, "ShowLook/"..getPlayerStorageValue(target, 21121).."/"..msg.."")endfunction doCloseInfoPoke(cid)local activeimg = truedoPlayerSendCancel(cid, "InfoClosed")if activeimg thenlocal close = "ClosePoke"doPlayerSendCancel(cid, close)endendfunction sendAllPokemonsBarPoke(cid)local container = getPlayerSlotItem(cid, 3).uidlocal pokes = "Pokebar"local t = getPlayerSlotItem(cid, 8)if t.uid ~= 0 thenpokeslot = getItemAttribute(t.uid, "poke") pokes = pokes.."/"..pokeslot..""endlocal pokeballs = getPokeballsInContainer(container) for i =1, #pokeballs dopokemons = getItemAttribute(pokeballs[i], "poke") pokes = pokes.."/"..pokemons..""enddoPlayerSendCancel(cid, pokes)endfunction addLevelAllpokes(cid, levelup)local container = getPlayerSlotItem(cid, 3).uidlocal pokes = "Parabens seus pokemons subiram de level"local msg = ""x = falselocal t = getPlayerSlotItem(cid, 8)local pokeballs = getPokeballsInContainer(container) for i =1, #pokeballs dopokemons = getItemAttribute(pokeballs[i], "poke") local level = getItemAttribute(pokeballs[i], "level") and getItemAttribute(pokeballs[i], "level") or 1local up = level+levelupdoItemSetAttribute(pokeballs[i], "level", up)msg = msg..pokemons.." Subiu para o level "..up.."\n"x = trueendif t.uid ~= 0 thenpokeslot = getItemAttribute(t.uid, "poke") local level = getItemAttribute(t.uid, "level") and getItemAttribute(t.uid, "level") or 1local up = level+levelupdoItemSetAttribute(t.uid, "level", up)msg = msg..pokeslot.." Subiu para o level "..up.."\n"endreturn doPlayerSendTextMessage(cid, 27, msg.."------------------------------------")end 

 

 

 

 

5. Vá na pasta data\talkactions\talkactions.xml

 

Coloque essa tag:


<talkaction words="/poke" case-sensitive="no" event="script" value="poke.lua"/>

depois crie um data\talkactions\scripts\poke.lua

 

 

  Ocultar conteúdo

 



function onSay(cid, words, param)local cfg = {exhausted = 5, -- Time you are exhausted in seconds.storage = 5858, -- Storage used for "exhaust."exp = 2.0 -- this means 2x more experence then default}if(getPlayerStorageValue(cid, cfg.storage) > os.time() and getPlayerStorageValue(cid, cfg.storage) < 100+os.time()) thendoPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "You must wait another " .. getPlayerStorageValue(cid, cfg.storage) - os.time() .. ' second' .. ((getPlayerStorageValue(cid, cfg.storage) - os.time()) == 1 and "" or "s") .. " to use new pokemon.")elseif doSendPokemon(cid, param) thensendAllPokemonsBarPoke(cid)setPlayerStorageValue(cid, cfg.storage, os.time() + cfg.exhausted)return trueenddoPlayerSendTextMessage(cid, 27, "Sua barra esta desatualizada")sendAllPokemonsBarPoke(cid)endreturn trueend

 

 

Coloque o game_barpoke dentro da pasta modules.

 

Download: www.mediafire.com/download/8bavucwof24bkxv/game_barpoke.rar

 

 


Créditos:
Soulviling
Caotic

http://prntscr.com/p9a15z

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...