Ir para conteúdo
  • Cadastre-se

Posts Recomendados

como liberar o pvp-zone ?

eu coloco no rme akele vermelho o de batalha

mas quando os player entra nao da pra matar um ao otro nao acontece nada como arrumar ?

Link para o post
Compartilhar em outros sites

Se o player não está pegando skull, pz locked quando ataca outro player dentro do PVP ZONE então o TFS está trabalhando como deveria.

discord.pngDiscord: vankk #7765

Precisando de ajuda? Entre em contato comigo via Discord.

 

Muitos vêm seus muitos dias de glória, mas poucos vêm seus muitos dias de luta.

Link para o post
Compartilhar em outros sites

MMHUCMQ.png  Esta é uma mensagem automática, este tópico foi movido para a área correta.
  Regras do fórum: http://www.tibiaking.com/forum/topic/1281-regras-gerais/#comment-7680

Este tópico foi movido:
De: Suporte OTServ > OTServ > Suporte de Spriting
Para: Suporte OTServ > OTServ > Suporte de Programação

discord.pngDiscord: vankk #7765

Precisando de ajuda? Entre em contato comigo via Discord.

 

Muitos vêm seus muitos dias de glória, mas poucos vêm seus muitos dias de luta.

Link para o post
Compartilhar em outros sites

e como arrumo isso ? 

ti´po da nem pra marcar o player  

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

Como assim não da parar marcar o player?

discord.pngDiscord: vankk #7765

Precisando de ajuda? Entre em contato comigo via Discord.

 

Muitos vêm seus muitos dias de glória, mas poucos vêm seus muitos dias de luta.

Link para o post
Compartilhar em outros sites
  • 4 weeks later...

Também estou prescisando...

Já alterei meu PZ level no config.lua e nada ainda.

​Obstaculo Impossível?

Impossível é existir algo Impossível ;) 

 

 

 

 

Confira os Meus Conteúdos ! 

Te ajudei ? REP + E Ficamos KIT ;)

Link para o post
Compartilhar em outros sites

@up

​Obstaculo Impossível?

Impossível é existir algo Impossível ;) 

 

 

 

 

Confira os Meus Conteúdos ! 

Te ajudei ? REP + E Ficamos KIT ;)

Link para o post
Compartilhar em outros sites

Se o  Servidor For (PDA) Tem que mexer em 2 arquivos (Exp.lua e some functions.lua)

Tenta assim vai em data/lib/some functions.lua e procure por = function canAttackOther(cid, pid)

 

[+] La em baixo antes do > if ehMonstro(cid) and ehMonstro(pid) and not isSummon(cid) and not isSummon(pid) then

adiciona isso:

 

if getTileInfo(getThingPos(cid)).pvp then

return "Can"

end

 

[+] Caso nao funcione ainda voce deixa  no Modo (PvP-Enforced) e teste-o Dnv

 

Creditos: Nextbr

Link para o post
Compartilhar em outros sites

ainda não testei, to pelo celular já já falo

 

Mas já dei um rep+

​Obstaculo Impossível?

Impossível é existir algo Impossível ;) 

 

 

 

 

Confira os Meus Conteúdos ! 

Te ajudei ? REP + E Ficamos KIT ;)

Link para o post
Compartilhar em outros sites

@gabrielzika e o exp.lua ???? -_-

@edit Gabriel, não consegui encontrar essa parte no somefuctions
Olha ai meu script \/
 

Spoiler

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

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

   local GENDER = (gender and genders[gender]) and genders[gender] or getRandomGenderByName(pokemon)
   local btype = (ball and pokeballs[ball]) and ball or isShinyName(pokemon) and "shinynormal" or "normal"
   local happy = 250

   if (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, "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)
   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)      --alterado v1.7 \/\/\/
if not isCreature(cid) or not tpw or not msg then return true end
return doPlayerSendTextMessage(cid, tpw, msg)
end

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

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

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

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

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

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

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

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

function ehMonstro(cid)   --alterado v1.9
return cid and cid >= AUTOID_MONSTERS and cid < AUTOID_NPCS and getCreatureMaster(cid) == cid
end                                                       --alterado v1.9.1 /\

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

function 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 then
return t[type][2]
else
return t[type][1]
end
end

function doConvertStoneIdToString(stoneID)
local t = {
[11453] = "Heart Stone",
[11441] = "Leaf Stone",
[11442] = "Water Stone",
[11443] = "Venom Stone",
[11444] = "Thunder Stone",
[11445] = "Rock Stone",
[11446] = "Punch Stone",
[11447] = "Fire Stone",               --alterado v1.6
[11448] = "Cocoon Stone",
[11449] = "Crystal Stone",
[11450] = "Darkess Stone",
[11451] = "Earth Stone",
[11452] = "Enigma Stone",
[11454] = "Ice Stone",
[12244] = "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] then
return t[stoneID]
else
return ""
end
end

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

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

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

bpslot = CONST_SLOT_BACKPACK

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

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

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

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

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

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

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

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

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

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

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

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

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

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

function doCorrectPokemonName(poke)
return doCorrectString(poke)
end

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

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

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

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

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

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

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

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

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

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

 if hideeffects then
  doRemoveCreature(pokemon)
 return true
 end

 local pokename = getPokeName(pokemon)

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

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

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

 doSendMagicEffect(getCreaturePosition(pokemon), effect)

 doRemoveCreature(pokemon)

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

end

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

function doGoPokemon(cid, item)

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

   btype = getPokeballType(item.itemid)                  

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

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

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

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

 if not pokes[pokemon] then
 return true
 end

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

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

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

 doSummonMonster(cid, pokemon)

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

 if getCreatureName(pk) == "Ditto" then

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

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

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

 doCreatureSetLookDir(pk, 2)

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

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

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

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

 doSendMagicEffect(getCreaturePosition(pk), effect)

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

 if useKpdoDlls then
  doUpdateMoves(cid)
 end
end

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

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

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

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

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

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

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

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

function isItemPokeball(item)         --alterado v1.9 \/
if not item then return false end
for a, b in pairs (pokeballs) do
 if isInArray(b.all, item) then return true end
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
 local ghosts = {"Gastly", "Haunter", "Gengar", "Shiny Gengar", "Misdreavus", "Shiny Abra"}
return isInArray(ghosts, getCreatureName(cid))
end

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

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

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

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

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

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

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

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

function setCD(item, tipo, tempo)

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

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

function getCD(item, tipo, limite)

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

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

 if number <= 0 then
 return 0
 end

 if limite and limite < number then
  return 0
 end

return number
end

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

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

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

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

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

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

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

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

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

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

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

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

function isWalkable(pos, creature, proj, pz, water)-- by Nord
    if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
    if isWater(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end
    if getTopCreature(pos).uid > 0 and creature then return false end
    if getTileInfo(pos).protection and pz then return false, true end
    local n = not proj and 3 or 2
    for i = 0, 255 do
        pos.stackpos = i
        local tile = getTileThingByPos(pos)
        if tile.itemid ~= 0 and not isCreature(tile.uid) then
            if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                return false
            end
        end
    end
    return true
end


function isPlayerSummon(cid, uid)
return getCreatureMaster(uid) == cid  --alterado v1.9
end

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

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

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

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

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

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

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

Me ajudaa dei o rep ja

​Obstaculo Impossível?

Impossível é existir algo Impossível ;) 

 

 

 

 

Confira os Meus Conteúdos ! 

Te ajudei ? REP + E Ficamos KIT ;)

Link para o post
Compartilhar em outros sites
15 horas atrás, SkyFrozer disse:

@gabrielzika e o exp.lua ???? -_-

@edit Gabriel, não consegui encontrar essa parte no somefuctions
Olha ai meu script \/
 

  Mostrar conteúdo oculto

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

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

   local GENDER = (gender and genders[gender]) and genders[gender] or getRandomGenderByName(pokemon)
   local btype = (ball and pokeballs[ball]) and ball or isShinyName(pokemon) and "shinynormal" or "normal"
   local happy = 250

   if (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, "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)
   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)      --alterado v1.7 \/\/\/
if not isCreature(cid) or not tpw or not msg then return true end
return doPlayerSendTextMessage(cid, tpw, msg)
end

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

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

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

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

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

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

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

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

function ehMonstro(cid)   --alterado v1.9
return cid and cid >= AUTOID_MONSTERS and cid < AUTOID_NPCS and getCreatureMaster(cid) == cid
end                                                       --alterado v1.9.1 /\

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

function 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 then
return t[type][2]
else
return t[type][1]
end
end

function doConvertStoneIdToString(stoneID)
local t = {
[11453] = "Heart Stone",
[11441] = "Leaf Stone",
[11442] = "Water Stone",
[11443] = "Venom Stone",
[11444] = "Thunder Stone",
[11445] = "Rock Stone",
[11446] = "Punch Stone",
[11447] = "Fire Stone",               --alterado v1.6
[11448] = "Cocoon Stone",
[11449] = "Crystal Stone",
[11450] = "Darkess Stone",
[11451] = "Earth Stone",
[11452] = "Enigma Stone",
[11454] = "Ice Stone",
[12244] = "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] then
return t[stoneID]
else
return ""
end
end

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

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

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

bpslot = CONST_SLOT_BACKPACK

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

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

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

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

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

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

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

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

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

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

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

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

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

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

function doCorrectPokemonName(poke)
return doCorrectString(poke)
end

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

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

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

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

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

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

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

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

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

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

 if hideeffects then
  doRemoveCreature(pokemon)
 return true
 end

 local pokename = getPokeName(pokemon)

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

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

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

 doSendMagicEffect(getCreaturePosition(pokemon), effect)

 doRemoveCreature(pokemon)

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

end

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

function doGoPokemon(cid, item)

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

   btype = getPokeballType(item.itemid)                  

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

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

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

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

 if not pokes[pokemon] then
 return true
 end

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

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

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

 doSummonMonster(cid, pokemon)

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

 if getCreatureName(pk) == "Ditto" then

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

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

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

 doCreatureSetLookDir(pk, 2)

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

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

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

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

 doSendMagicEffect(getCreaturePosition(pk), effect)

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

 if useKpdoDlls then
  doUpdateMoves(cid)
 end
end

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

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

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

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

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

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

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

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

function isItemPokeball(item)         --alterado v1.9 \/
if not item then return false end
for a, b in pairs (pokeballs) do
 if isInArray(b.all, item) then return true end
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
 local ghosts = {"Gastly", "Haunter", "Gengar", "Shiny Gengar", "Misdreavus", "Shiny Abra"}
return isInArray(ghosts, getCreatureName(cid))
end

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

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

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

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

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

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

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

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

function setCD(item, tipo, tempo)

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

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

function getCD(item, tipo, limite)

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

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

 if number <= 0 then
 return 0
 end

 if limite and limite < number then
  return 0
 end

return number
end

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

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

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

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

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

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

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

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

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

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

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

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

function isWalkable(pos, creature, proj, pz, water)-- by Nord
    if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
    if isWater(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end
    if getTopCreature(pos).uid > 0 and creature then return false end
    if getTileInfo(pos).protection and pz then return false, true end
    local n = not proj and 3 or 2
    for i = 0, 255 do
        pos.stackpos = i
        local tile = getTileThingByPos(pos)
        if tile.itemid ~= 0 and not isCreature(tile.uid) then
            if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                return false
            end
        end
    end
    return true
end


function isPlayerSummon(cid, uid)
return getCreatureMaster(uid) == cid  --alterado v1.9
end

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

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

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

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

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

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

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

Me ajudaa dei o rep ja

Tenta Assim -.-:hum::hum:

 

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

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

   local GENDER = (gender and genders[gender]) and genders[gender] or getRandomGenderByName(pokemon)
   local btype = (ball and pokeballs[ball]) and ball or isShinyName(pokemon) and "shinynormal" or "normal"
   local happy = 250

   if (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, "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)
   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)      --alterado v1.7 \/\/\/
if not isCreature(cid) or not tpw or not msg then return true end
return doPlayerSendTextMessage(cid, tpw, msg)
end

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

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

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

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

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

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

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

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

function ehMonstro(cid)   --alterado v1.9
return cid and cid >= AUTOID_MONSTERS and cid < AUTOID_NPCS and getCreatureMaster(cid) == cid
end                                                       --alterado v1.9.1 /\

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

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

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

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

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

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

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

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

   if getTileInfo(getThingPos(cid)).pvp then
      return "Can"
   end

   if ehMonstro(cid) and ehMonstro(pid) then
      return "Can"
   end

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

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

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

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

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

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

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

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


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

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

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

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

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

function 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 then
return t[type][2]
else
return t[type][1]
end
end

function doConvertStoneIdToString(stoneID)
local t = {
[11453] = "Heart Stone",
[11441] = "Leaf Stone",
[11442] = "Water Stone",
[11443] = "Venom Stone",
[11444] = "Thunder Stone",
[11445] = "Rock Stone",
[11446] = "Punch Stone",
[11447] = "Fire Stone",               --alterado v1.6
[11448] = "Cocoon Stone",
[11449] = "Crystal Stone",
[11450] = "Darkess Stone",
[11451] = "Earth Stone",
[11452] = "Enigma Stone",
[11454] = "Ice Stone",
[12244] = "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] then
return t[stoneID]
else
return ""
end
end

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

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

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

bpslot = CONST_SLOT_BACKPACK

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

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

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

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

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

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

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

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

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

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

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

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

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

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

function doCorrectPokemonName(poke)
return doCorrectString(poke)
end

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

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

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

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

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

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

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

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

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

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

 if hideeffects then
  doRemoveCreature(pokemon)
 return true
 end

 local pokename = getPokeName(pokemon)

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

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

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

 doSendMagicEffect(getCreaturePosition(pokemon), effect)

 doRemoveCreature(pokemon)

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

end

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

function doGoPokemon(cid, item)

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

   btype = getPokeballType(item.itemid)                  

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

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

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

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

 if not pokes[pokemon] then
 return true
 end

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

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

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

 doSummonMonster(cid, pokemon)

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

 if getCreatureName(pk) == "Ditto" then

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

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

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

 doCreatureSetLookDir(pk, 2)

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

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

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

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

 doSendMagicEffect(getCreaturePosition(pk), effect)

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

 if useKpdoDlls then
  doUpdateMoves(cid)
 end
end

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

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

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

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

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

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

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

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

function isItemPokeball(item)         --alterado v1.9 \/
if not item then return false end
for a, b in pairs (pokeballs) do
 if isInArray(b.all, item) then return true end
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
 local ghosts = {"Gastly", "Haunter", "Gengar", "Shiny Gengar", "Misdreavus", "Shiny Abra"}
return isInArray(ghosts, getCreatureName(cid))
end

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

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

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

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

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

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

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

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

function setCD(item, tipo, tempo)

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

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

function getCD(item, tipo, limite)

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

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

 if number <= 0 then
 return 0
 end

 if limite and limite < number then
  return 0
 end

return number
end

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

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

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

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

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

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

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

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

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

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

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

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

function isWalkable(pos, creature, proj, pz, water)-- by Nord
    if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
    if isWater(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end
    if getTopCreature(pos).uid > 0 and creature then return false end
    if getTileInfo(pos).protection and pz then return false, true end
    local n = not proj and 3 or 2
    for i = 0, 255 do
        pos.stackpos = i
        local tile = getTileThingByPos(pos)
        if tile.itemid ~= 0 and not isCreature(tile.uid) then
            if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                return false
            end
        end
    end
    return true
end


function isPlayerSummon(cid, uid)
return getCreatureMaster(uid) == cid  --alterado v1.9
end

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

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

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

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

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

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

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

Link para o post
Compartilhar em outros sites

@gabrielzika e o exp.lua ?? -_-

Funcionou sem o exp.lua , mas você disse que precisava ai to com medo de dar erro futuramente.

​Obstaculo Impossível?

Impossível é existir algo Impossível ;) 

 

 

 

 

Confira os Meus Conteúdos ! 

Te ajudei ? REP + E Ficamos KIT ;)

Link para o post
Compartilhar em outros sites
  • 1 month later...

E para quem não usa PDA, usa PDE como seria?

                               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~Assinatura~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                                                pmnz1.jpg

Link para o post
Compartilhar em outros sites
  • 3 months later...

o Meu

Em 24/01/2016 at 22:08, gabrielzika disse:

Se o  Servidor For (PDA) Tem que mexer em 2 arquivos (Exp.lua e some functions.lua)

Tenta assim vai em data/lib/some functions.lua e procure por = function canAttackOther(cid, pid)

 

[+] La em baixo antes do > if ehMonstro(cid) and ehMonstro(pid) and not isSummon(cid) and not isSummon(pid) then

adiciona isso:

 

if getTileInfo(getThingPos(cid)).pvp then

return "Can"

end

 

[+] Caso nao funcione ainda voce deixa  no Modo (PvP-Enforced) e teste-o Dnv

 

Creditos: Nextbr

o meu n pego da pra ajuda ja mudei o script do somefuction

 

Link para o post
Compartilhar em outros sites
8 horas atrás, israel sylva sylva disse:

o Meu

o meu n pego da pra ajuda ja mudei o script do somefuction

 

Manda seu Somefunctions.lua

Link para o post
Compartilhar em outros sites
37 minutos atrás, gabrielzika disse:

Manda seu Somefunctions.lua

ja conseguir faltava coloca pvp pelo remeres

Voce tem script Boost stone exemplo meu poke ta +8 se falhar ele volta pra+5 +4 e etc Dou varios Rep

3 minutos atrás, israel sylva sylva disse:

ja conseguir faltava coloca pvp pelo remeres

Voce tem script Boost stone exemplo meu poke ta +8 se falhar ele volta pra+5 +4 e etc Dou varios Rep

Pode ajuda

43 minutos atrás, gabrielzika disse:

Manda seu Somefunctions.lua

Ajuda sistema Boost Favor

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

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

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

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

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

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

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

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

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

Informação Importante

Confirmação de Termo