Ir para conteúdo

BrunooMaciell

Infante
  • Total de itens

    1917
  • Registro em

  • Última visita

  • Dias Ganhos

    7

Posts postados por BrunooMaciell

  1. 2 horas atrás, Yan18 disse:

    Faz um teste, muda a variável accountManagerRandomPokemonOutfit para true:

    
    accountManagerRandomPokemonOutfit = true

    Testa e vê se o Account Manager vira algum pokémon.

    NADA =/ kkkkkk e muito estranho mas muito kkkkkk

  2. 9 horas atrás, Yan18 disse:

    Da algum tipo de erro?

    nao so que nao muda muito estranho 

     

    na configuration.lua achei isso e mudei

     

    accountManagerOutfit = {lookType = 385, lookHead = 1, lookBody = 1, lookLegs = 1, lookFeet = 1}
    accountManagerRandomPokemonOutfit = false -- se true, quando o acc manager logar, vai ter uma outfit de pokemon aleatoria

     

    E mesmo assim tbem nao mudou 

  3. 1 hora atrás, Yan18 disse:

    Pelo visto seu servidor tem uma variável global chamada accountManagerOutfit, e nela está armazenado o looktype dessa outfit de ADM na maioria das bases. E no seu script tem a condição para caso looktype seja aleatório de pokémons ele pega um pokémon aleatório ou pega essa variável accountManagerOutfit, que fica nesse bloco:

     

    
     if getCreatureName(cid) == "Account Manager" then
            local outfit = {}
            if accountManagerRandomPokemonOutfit then
                outfit = {lookType = getPokemonXMLOutfit(oldpokedex[math.random(151)][1])}
            else
                outfit = accountManagerOutfit
            end
        
            doSetCreatureOutfit(cid, outfit, -1)
        return true
        end

     

    Eu arrumei para você, troque o seu script por esse:

    
    local config = {
        loginMessage = getConfigValue('loginMessage'),
        useFragHandler = getBooleanFromString(getConfigValue('useFragHandler'))
    }
    
    local looktype_account_manager = {lookType = 215}
    
    --alterado v2.6 tabelas soh em lib/configuration.lua;
    
    function onLogin(cid)
              
    	  registerCreatureEvent(cid, "hmup")
    	  registerCreatureEvent(cid, "PlayerAttack")
              registerCreatureEvent(cid, "dropStone") 
              registerCreatureEvent(cid, "OnAdvanced")
    	  registerCreatureEvent(cid, "vipexp")
              registerCreatureEvent(cid, "ShowPokedex") 
              registerCreatureEvent(cid, "ClosePokedex")
              registerCreatureEvent(cid, "WatchTv")
    	  registerCreatureEvent(cid, "DropShiny")
              registerCreatureEvent(cid, "StopWatchingTv")
              registerCreatureEvent(cid, "WalkTv")
              registerCreatureEvent(cid, "RecordTv")
              registerCreatureEvent(cid, "Death")
              registerCreatureEvent(cid, "PlayerLogout")
              registerCreatureEvent(cid, "WildAttack")
              registerCreatureEvent(cid, "Idle")
              registerCreatureEvent(cid, "PokemonIdle")
              registerCreatureEvent(cid, "EffectOnAdvance")
              registerCreatureEvent(cid, "reward")
              registerCreatureEvent(cid, "GeneralConfiguration")
              registerCreatureEvent(cid, "ExtendedOpcode")
              registerCreatureEvent(cid, "ReportBug")
              registerCreatureEvent(cid, "LookSystem")
              registerCreatureEvent(cid, "T1")
              registerCreatureEvent(cid, "T2")
              registerCreatureEvent(cid, "ll1")
              registerCreatureEvent(cid, "task_count")
              registerCreatureEvent(cid, "effectdeath")
              registerCreatureEvent(cid, "dota")
              registerCreatureEvent(cid, "atk")
              registerCreatureEvent(cid, "balance")
    	  registerCreatureEvent(cid, "BlockHit")
    	  registerCreatureEvent(cid, "Ataque")
    	  registerCreatureEvent(cid, "NlooT")
    	  registerCreatureEvent(cid, "KillTask")
    	  registerCreatureEvent(cid, "KillTaske")
    	  registerCreatureEvent(cid, "KillTask3")
    	  registerCreatureEvent(cid, "KillTask4")
    	  registerCreatureEvent(cid, "PlayerDeath")
    	  registerCreatureEvent(cid, "PetKill")
    	  registerCreatureEvent(cid, "onlinebonus")
    	  registerCreatureEvent(cid, "AtLoot")
    	  registerCreatureEvent(cid, "Monster Hunterl")
    	  registerCreatureEvent(cid, "Monster Hunter")
              doRegainSpeed(cid)
              doUpdatePokemonsBar(cid)
              doPlayerSetLossPercent(cid, PLAYERLOSS_EXPERIENCE, 25)
              doCreatureSetDropLoot(cid, false)
    
    	if getPlayerStorageValue(cid, 17000) >= 1 then
    	setPlayerStorageValue(cid, 17000, 0)
    	doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false) 
    	sendMsgToPlayer(cid, 20, "Voce Deslogou No Fly E Foi Teleportado Para O CP Por Questoes De Seguranca.")    
    	return true
    	end
    
    	setPlayerStorageValue(cid, 17001, 0) --ride
    	setPlayerStorageValue(cid, 92003, 0) --water robotic
    	setPlayerStorageValue(cid, 92002, 0) --fire robotic
    	setPlayerStorageValue(cid, 92001, 0) --water robotic
    	setPlayerStorageValue(cid, 32001, 0) --bike 
    
    
    	if getCreatureName(cid) ~= "Account Manager" then -- O "ACCOUNT MANAGER" É EXCEÇÃO.
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Voce possui " .. getPlayerStorageValue(cid,5984548) .. "x Online Bonus armazenados em seu personagem. Digite !opshop a qualquer momento para saber quantos Online Points voce possui.")
    	end
    
    	if getPlayerStorageValue(cid, 5984548) < 0 then
        setPlayerStorageValue(cid, 5984548, 0)
    	return true end
    	
    
    -- SE AS QUANTIDADES DE FUSION HELDS POINTS FOREM MENOR QUE 0, SETA AS QUANTIDADES DE FUSION HELDS POINTS PARA 0
    	if getPlayerStorageValue(cid, 1234601) < 0 then
    	setPlayerStorageValue(cid, 1234601, 0)
    	return true end
    	
        if getPlayerStorageValue(cid, 1234602) < 0 then
    	setPlayerStorageValue(cid, 1234602, 0)
    	return true end
    	
        if getPlayerStorageValue(cid, 1234603) < 0 then
    	setPlayerStorageValue(cid, 1234603, 0)
    	return true end
    	
        if getPlayerStorageValue(cid, 1234604) < 0 then
    	setPlayerStorageValue(cid, 1234604, 0)
    	return true end
    	
        if getPlayerStorageValue(cid, 1234605) < 0 then
    	setPlayerStorageValue(cid, 1234605, 0)
    	return true end
    	
    	
        if getPlayerStorageValue(cid, 1234606) < 0 then
    	setPlayerStorageValue(cid, 1234606, 0)
    	return true end
    	
        if getPlayerStorageValue(cid, 1234607) < 0 then
    	setPlayerStorageValue(cid, 1234607, 0)
    	return true end
    
    
        local accountManager = getPlayerAccountManager(cid)
    
        if(accountManager == MANAGER_NONE) then
            local lastLogin, str = getPlayerLastLoginSaved(cid), config.loginMessage
            if(lastLogin > 0) then
                doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, str)
                str = "Your last visit was on " .. os.date("%a %b %d %X %Y", lastLogin) .. "."
            end
    
    
       doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, 'Bem Vindo Ao Pokemon Venetta Server')
     
                    
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, str)
    
            elseif(accountManager == MANAGER_NAMELOCK) then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Ola, parece que voce teve seu nome bloqueado (nameblock), escolha outro nome.")
        elseif(accountManager == MANAGER_ACCOUNT) then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Hello, type 'account' to manage your account and if you want to start over then type 'cancel'.")
        else
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Hello, type 'account' to create an account or type 'recover' to recover an account.")
        end
    
        if getCreatureName(cid) == "Account Manager" then
            local outfit = {}
            if accountManagerRandomPokemonOutfit then
                outfit = {lookType = getPokemonXMLOutfit(oldpokedex[math.random(151)][1])}
            else
                outfit = looktype_account_manager
            end
        
            doSetCreatureOutfit(cid, outfit, -1)
        return true
        end
    
        if(not isPlayerGhost(cid)) then
            doSendMagicEffect(getCreaturePosition(cid), CONST_ME_TELEPORT)
        end
    
        local outfit = {}
    
        if getPlayerVocation(cid) == 0 then
            doPlayerSetMaxCapacity(cid, 7)
            doPlayerSetVocation(cid, 1)
            setCreatureMaxMana(cid, 6)
            doPlayerAddSoul(cid, -getPlayerSoul(cid))
            setPlayerStorageValue(cid, 19898, 0)
                if getCreatureOutfit(cid).lookType == 510 then
                    outfit = {lookType = 510, lookHead = math.random(0, 132), lookBody = math.random(0, 132), lookLegs = math.random(0, 132), lookFeet = math.random(0, 132)}
                elseif getCreatureOutfit(cid).lookType == 511 then
                    outfit = {lookType = 511, lookHead = math.random(0, 132), lookBody = math.random(0, 132), lookLegs = math.random(0, 132), lookFeet = math.random(0, 132)}
                end
            doCreatureChangeOutfit(cid, outfit)
        end
    
    
    	  
    	  
        if getPlayerStorageValue(cid, 99284) == 1 then
            setPlayerStorageValue(cid, 99284, -1)
        end
    
        if getPlayerStorageValue(cid, 6598754) >= 1 or getPlayerStorageValue(cid, 6598755) >= 1 then
           setPlayerStorageValue(cid, 6598754, -1)
           setPlayerStorageValue(cid, 6598755, -1)
           doRemoveCondition(cid, CONDITION_OUTFIT)             --alterado v2.9 \/
           doTeleportThing(cid, posBackPVP, false)
           doCreatureAddHealth(cid, getCreatureMaxHealth(cid))
        end
        
        doChangeSpeed(cid, -(getCreatureSpeed(cid)))
        
        --///////////////////////////////////////////////////////////////////////////--
        -- local storages = {17000, 63215, 17001, 13008, 5700}
        -- for s = 1, #storages do
            -- if not tonumber(getPlayerStorageValue(cid, storages)) then
               -- if s == 3 then
                  -- setPlayerStorageValue(cid, storages, 1)
               -- elseif s == 4 then
                  -- setPlayerStorageValue(cid, storages, -1)
               -- else   
                  -- if isBeingUsed(getPlayerSlotItem(cid, 8).itemid) then
                     -- setPlayerStorageValue(cid, storages, 1)                 --alterado v2.6
                  -- else
                     -- setPlayerStorageValue(cid, storages, -1) 
                  -- end
               -- end
               -- doPlayerSendTextMessage(cid, 27, "Sorry, but a problem occurred on the server, but now it's alright")
            -- end
        -- end
        --/////////////////////////////////////////////////////////////////////////--
           
        if getPlayerStorageValue(cid, 17000) >= 1 then -- fly
            
            local item = getPlayerSlotItem(cid, 8)
            local poke = getItemAttribute(item.uid, "poke")
            doChangeSpeed(cid, getPlayerStorageValue(cid, 54844))
            doRemoveCondition(cid, CONDITION_OUTFIT)
                    local addonfly = getPlayerSlotItem(cid, 8).uid
                    local addofly = getItemAttribute(addonfly,"addonfly")
                    if not addofly then
                                    doSetItemAttribute(addonfly,"addonfly",0) 
                                            doSetCreatureOutfit(cid, {lookType = flys[poke][1] + 351}, -1)
    
                    end
                    if addofly > 0 then
                                   doSetCreatureOutfit(cid, {lookType = addofly}, -1)
    
                    end
    
        local apos = getFlyingMarkedPos(cid)
        apos.stackpos = 0
            
                if getTileThingByPos(apos).itemid <= 2 then
                    doCombatAreaHealth(cid, FIREDAMAGE, getFlyingMarkedPos(cid), 0, 0, 0, CONST_ME_NONE)
                    doCreateItem(460, 1, getFlyingMarkedPos(cid))
                end 
    
        doTeleportThing(cid, apos, false) 
        if getItemAttribute(item.uid, "boost") and getItemAttribute(item.uid, "boost") >= 50 and getPlayerStorageValue(cid, 42368) >= 1 then   
           sendAuraEffect(cid, auraSyst[getItemAttribute(item.uid, "aura")])                     --alterado v2.8
        end  
     
        local posicao = getTownTemplePosition(getPlayerTown(cid))
        markFlyingPos(cid, posicao)
        
        elseif getPlayerStorageValue(cid, 63215) >= 1 then -- surf
    
            local item = getPlayerSlotItem(cid, 8)
            local poke = getItemAttribute(item.uid, "poke")
                         local addonsurf = getPlayerSlotItem(cid, 8).uid
                    local addosurf = getItemAttribute(addonsurf,"addonsurf")
                    if not addosurf then
                                    doSetItemAttribute(addonsurf,"addonsurf",0) 
            doSetCreatureOutfit(cid, {lookType = surfs[poke].lookType + 351}, -1)
    
                    end
                    if addosurf > 0 then
                                    doSetCreatureOutfit(cid, {lookType = addosurf}, -1)
    
                    end    
            doChangeSpeed(cid, getPlayerStorageValue(cid, 54844))
            if getItemAttribute(item.uid, "boost") and getItemAttribute(item.uid, "boost") >= 50 and getPlayerStorageValue(cid, 42368) >= 1 then   
               sendAuraEffect(cid, auraSyst[getItemAttribute(item.uid, "aura")])                     --alterado v2.8
            end 
    
        elseif getPlayerStorageValue(cid, 17001) >= 1 then -- ride
            
            local item = getPlayerSlotItem(cid, 8)
            local poke = getItemAttribute(item.uid, "poke")
            
            
            if rides[poke] then
               doChangeSpeed(cid, getPlayerStorageValue(cid, 54844))
               doRemoveCondition(cid, CONDITION_OUTFIT)
                         local addonride = getPlayerSlotItem(cid, 8).uid
                    local addoride = getItemAttribute(addonride,"addonride")
                    if not addofly then
                                    doSetItemAttribute(addonride,"addonride",0) 
               doSetCreatureOutfit(cid, {lookType = rides[poke][1] + 351}, -1)
    
                    end
                    if addoride > 0 then
                                    doSetCreatureOutfit(cid, {lookType = addoride}, -1)
    
                    end
               if getItemAttribute(item.uid, "boost") and getItemAttribute(item.uid, "boost") >= 50 and getPlayerStorageValue(cid, 42368) >= 1 then   
                  sendAuraEffect(cid, auraSyst[getItemAttribute(item.uid, "aura")])                     --alterado v2.8
               end 
            else
            end
    		
        
            local posicao2 = getTownTemplePosition(getPlayerTown(cid))
            markFlyingPos(cid, posicao2)
            
        elseif getPlayerStorageValue(cid, 13008) >= 1 then -- dive
           if not isInArray({5405, 5406, 5407, 5408, 5409, 5410}, getTileInfo(getThingPos(cid)).itemid) then
                setPlayerStorageValue(cid, 13008, 0)
                doRemoveCondition(cid, CONDITION_OUTFIT)
            return true
            end   
              
           if getPlayerSex(cid) == 1 then
              doSetCreatureOutfit(cid, {lookType = 1034, lookHead = getCreatureOutfit(cid).lookHead, lookBody = getCreatureOutfit(cid).lookBody, lookLegs = getCreatureOutfit(cid).lookLegs, lookFeet = getCreatureOutfit(cid).lookFeet}, -1)
           else
              doSetCreatureOutfit(cid, {lookType = 1035, lookHead = getCreatureOutfit(cid).lookHead, lookBody = getCreatureOutfit(cid).lookBody, lookLegs = getCreatureOutfit(cid).lookLegs, lookFeet = getCreatureOutfit(cid).lookFeet}, -1)
           end
           doChangeSpeed(cid, 800)
    
         elseif getPlayerStorageValue(cid, 5700) > 0 then   --bike
            doChangeSpeed(cid, -getCreatureSpeed(cid))
            doChangeSpeed(cid, getPlayerStorageValue(cid, 5700))  --alterado v2.8
            if getPlayerSex(cid) == 1 then
               doSetCreatureOutfit(cid, {lookType = 1394}, -1)
            else
               doSetCreatureOutfit(cid, {lookType = 1393}, -1)
            end
        elseif getPlayerStorageValue(cid, 75846) >= 1 then     --alterado v2.9 \/
            doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid)), false)  
            setPlayerStorageValue(cid, 75846, -1)
            sendMsgToPlayer(cid, 20, "You have been moved to your town!")    
         else
            doRegainSpeed(cid)  --alterado v2.6
         end
        
        if getPlayerStorageValue(cid, 22545) >= 1 then   --golden arena
           setPlayerStorageValue(cid, 22545, -1)              --alterado v2.4
           doTeleportThing(cid, getClosestFreeTile(cid, posBackGolden), false)
           setPlayerRecordWaves(cid)     --alterado v2.7 
        end
    	
    	-- local CP = {x=1056, y=1049, z=7}
    	
    	-- if getPlayerStorageValue(cid, 17000) >= 1 then
    -- setPlayerStorageValue(cid, 17000, 0)
           -- doTeleportThing(cid, CP)
    
    -- end
        
        return true
    end 

    Ai na variável local que eu criei looktype_account_manager você coloca o looktype desejado dentro da tabela (looktype_account_manager = {looktype = ID DO LOOKTYPE AQUI}).

     

    Você também tem a opção de achar essa variável global accountManagerOutfit que provavelmente está no configurations.lua ou em algum outro arquivo da pasta Lib e mudar o id do looktype lá. Mas recomendo usar meu script mesmo, vai ser mais fácil para você.

     

    Testa e me fala.

    Entao amigo!!

     

    Oque eu percebi e fiz no cliente tem 2 IDS com esta looktype creio eu um foi feito meio que por account manager e outro como uso de outfit mesmo entao eu editei um.

     

    Porem testei o seu agora e nao funciono tbem eu editei coloquei um outro e em game ele nao mudo 

  4. 29 minutos atrás, lSainty disse:
    
    local tempo = 10 -- tempo em segundos
    
    local monsters = {                                                            
        [100] = {"Pidgey", "Spearow", "Budew", "Sunkern", "Cherubi"},        --[chance] = {para cair um dos monstros}
        [80] = {"Ledyba", "Sentret", "Wurmple", "Hoppip", "Spinarak"},
        [70] = {"Pidove", "Petilil", "Ferroseed"},
        [60] = {"Kakuna", "Metapod", "Silcoon", "Cascoon", "Vullaby"},
        [50] = {"Pineco", "Bonsly", "Cherrim", "Taillow", "Durant"},
        [40] = {"Starly", "Combee", "Natu", "Hoothoot", "Larvesta"},
        [30] = {"Woobat", "Sewaddle", "Cottonee", "Swadloon"},
        [20] = {"Chatot", "Beedrill", "Butterfree", "Ledian", "Skiploom"},
        [10] = {"Yanma", "Beautifly", "Dustox", "Masquerain", "Kricketot"},
        [8] = {"Pidgeot", "Tranquill", "Rufflet", "Archen", "Volcarona"},
        [7] = {"Venomoth", "Farfetch'D", "Murkrow", "Forretress", "Ninjask"},
        [6] = {"Staravia", "Vespiquen", "Yanmega", "Swoobat", "Honchkrow"},
        [5] = {"Fearow", "Pidgeot", "Noctowl", "Xatu", "Ariados", "Mandibuzz"},
        [3] = {"Swellow", "Shedinja", "Staraptor", "Kricketune"},
        [2] = {"Braviary", "Unfezant", "Archeops"},
    }                                                    
    
    function onUse(cid, item, fromPosition, itemEx, toPosition)
    	if getPlayerStorageValue(cid, 23491) >= os.time() then
    		doPlayerSendCancel(cid, "You must wait " .. tempo .. " to use again.")
    		doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
    		return true
    	end
    	if not isPremium(cid) then
    		doPlayerSendCancel(cid, "You need premium account.")
    		return true
    	end
    	local e = {2,3,4,5,6,9}
    	local t = {}
    	for _, v in pairs(monsters) do 
    		table.insert(t, _)
    	end
    	table.sort(t)
    	for _, v in pairs(t) do
    		if math.random(1, 100) < v then
    			c = v
    			break
    		end
    	end
    	local m = monsters[c][math.random(1,#monsters[c])]
    	local monster = doCreateMonster(m, getPlayerPosition(cid))
    	doSendMagicEffect(getCreaturePosition(monster), CONST_ME_TELEPORT)
    	doSendMagicEffect(toPosition, e[math.random(1,#e)])
    	doCreatureSay(monster, m.." was hidden on top of the tree! HAHAHA!", TALKTYPE_ORANGE_1)
    	setPlayerStorageValue(cid, 23491, tempo + os.time())
    	return true
    end

     

    Deu certo ^^

     

    Vlww ? 

  5. Entao meu sistema de headbutt queria por ele pra premium account.

     

    System

    local tempo = 10 -- tempo em segundos
    
    local monsters = {                                                            
        [100] = {"Pidgey", "Spearow", "Budew", "Sunkern", "Cherubi"},        --[chance] = {para cair um dos monstros}
        [80] = {"Ledyba", "Sentret", "Wurmple", "Hoppip", "Spinarak"},
        [70] = {"Pidove", "Petilil", "Ferroseed"},
        [60] = {"Kakuna", "Metapod", "Silcoon", "Cascoon", "Vullaby"},
        [50] = {"Pineco", "Bonsly", "Cherrim", "Taillow", "Durant"},
        [40] = {"Starly", "Combee", "Natu", "Hoothoot", "Larvesta"},
        [30] = {"Woobat", "Sewaddle", "Cottonee", "Swadloon"},
        [20] = {"Chatot", "Beedrill", "Butterfree", "Ledian", "Skiploom"},
        [10] = {"Yanma", "Beautifly", "Dustox", "Masquerain", "Kricketot"},
        [8] = {"Pidgeot", "Tranquill", "Rufflet", "Archen", "Volcarona"},
        [7] = {"Venomoth", "Farfetch'D", "Murkrow", "Forretress", "Ninjask"},
        [6] = {"Staravia", "Vespiquen", "Yanmega", "Swoobat", "Honchkrow"},
        [5] = {"Fearow", "Pidgeot", "Noctowl", "Xatu", "Ariados", "Mandibuzz"},
        [3] = {"Swellow", "Shedinja", "Staraptor", "Kricketune"},
        [2] = {"Braviary", "Unfezant", "Archeops"},
    }                                                    
    
    function onUse(cid, item, fromPosition, itemEx, toPosition)
    if getPlayerStorageValue(cid, 23491) >= os.time() then
        doPlayerSendCancel(cid, "You must wait " .. tempo .. " to use again.")
        doSendMagicEffect(getPlayerPosition(cid), CONST_ME_POFF)
        return true
    end
    local e = {2,3,4,5,6,9}
    local t = {}
    for _, v in pairs(monsters) do 
    table.insert(t, _)
    end
    table.sort(t)
    for _, v in pairs(t) do
    if math.random(1, 100) < v then
    c = v
    break
    end
    end
    local m = monsters[c][math.random(1,#monsters[c])]
    local monster = doCreateMonster(m, getPlayerPosition(cid))
    doSendMagicEffect(getCreaturePosition(monster), CONST_ME_TELEPORT)
    doSendMagicEffect(toPosition, e[math.random(1,#e)])
    doCreatureSay(monster, m.." was hidden on top of the tree! HAHAHA!", TALKTYPE_ORANGE_1)
    setPlayerStorageValue(cid, 23491, tempo + os.time())
    return true
    end

    Rep+++

  6. 23 minutos atrás, FlamesAdmin disse:

    Troca tudo isso por esse que te mandei acima

    
    if getCreatureName(cid) == "Account Manager" then
            local outfit = {}
            if accountManagerRandomPokemonOutfit then
                outfit = {lookType = getPokemonXMLOutfit(oldpokedex[math.random(151)][1])}
            else
                outfit = accountManagerOutfit
            end
        
            doSetCreatureOutfit(cid, outfit, -1)
        return true
        end

     

    entao eu fiz isto e nao deu certo tipo nao mudo isso que to achando muito mas muito estranho 

  7. 24 minutos atrás, FlamesAdmin disse:

    Troca por isso

    
    if getCreatureName(cid) == "Account Manager" then
        doSetCreatureOutfit(cid, {lookType = 725}, -1)
        return true
      end

    Só mudar o 725 pro looktype que você quiser

    Eu fiz oque tu mando na hora que liguei o server nao deu ERRO nem nada porem quando entrei nao mudo =/

  8. 54 minutos atrás, Deadpool disse:

    no login

    
    		local outfit = {}

     

    Entao eu achei isso 

     if getCreatureName(cid) == "Account Manager" then
            local outfit = {}
            if accountManagerRandomPokemonOutfit then
                outfit = {lookType = getPokemonXMLOutfit(oldpokedex[math.random(151)][1])}
            else
                outfit = accountManagerOutfit
            end

    Onde fica o ID que posso muda da outfit e este >> 151 ??

  9. 45 minutos atrás, FlamesAdmin disse:

    Procura no outfits.xml da pasta XML por isso

    
    <outfit id="41" access = "5">
    <list gender="0-3" lookType="618" name="Administrator"/>
    </outfit>
    <outfit id="63" access = "5">
    <list gender="0-3" lookType="725" name="Administrator"/>
    </outfit>
    
    <outfit id="59" access = "3">
    <list gender="0-3" lookType="617" name="GameMaster"/>
    </outfit>

     

    mais tipo amigo o meu account manager esta com esta outfit e eu queria muda porem na sql na tabela la eu ja mudei la so que em game nao atualiza eu queria muda esta outfit 

  10. Eu queria muda o looktype a roupa do account manager porem fui no sql pra edita la e nao funcionou nao mudo.

     

    Ai nao sei se tem que edita ou se e outro lugar que edita ??

    245651792_Semttulo.png.be24d57eeb343df4c0c6879e27e51c90.png

     

    /\ aii queria muda ^^ 

     

    Rep+++

  11. 2 horas atrás, Yan18 disse:

    O erro está nessa linha:

    
    if #getCreatureSummfighting = falseons(_target) > 0 then

    Não tem sentido algum a expressão no if. Mude para :

    
    if #getCreatureSummons(_target) > 0 then

     

    Estou me baseando no seu outro próprio post: 

     

    Então a função vai ficar:

    
    function selfAttackCreature()
    if #getCreatureSummons(getNpcCid()) > 0 and not isCreature(getCreatureTarget(getCreatureSummons(getNpcCid())[1])) then
        local list = getSpectators(getCreaturePosition(getNpcCid()), 7, 7, false)
        for i=0, table.getn(list) do
            local _target = list
            if(_target ~= 0) then
                if isPlayer(_target) and not getTileInfo(getThingPos(_target)).protection then
                    if #getCreatureSummons(_target) > 0 then
                        doMonsterSetTarget(getCreatureSummons(getNpcCid())[1], getCreatureSummons(_target)[1])
                        setPlayerStorageValue(getCreatureSummons(getNpcCid())[1], 99856201, getNpcCid())
                    else
                      fighting = false
                    end
                    target = _target
                    break
                end
            end
        end
    end
    
    end

    Só substituir no Some Functions.lua onde coloquei para você, ou apenas trocar a linha acima.

     

    A linha alterada foi o que o Nociam te respondeu no seu outro post, ai tem que testar para ver se funciona. Mas, como ele recomendou nesse post recente:

    Deve ter funcionado.

     

    Teste e avise se der problema.

    Agora sim ^^

     

    So que deu um erro de npc agora eu ate imagino oque e porem fui na script do npc e nao achei os pokemons que deu erro

     

    BUG

    Spoiler

    [17/07/2020 11:58:27] Error in npc: Hunter, tring to execute function 'doSummonGymPokemon', poke: Octopus Octillery
    [17/07/2020 11:58:28] Error in npc: Hunter, tring to execute function 'doSummonGymPokemon', poke: Elder Electabuzz
    [17/07/2020 11:58:28] Error in npc: Hunter, tring to execute function 'doSummonGymPokemon', poke: Bone Marowak
    [17/07/2020 11:58:28] Error in npc: Hunter, tring to execute function 'doSummonGymPokemon', poke: Master Stantler
    [17/07/2020 11:58:29] Error in npc: Hunter, tring to execute function 'doSummonGymPokemon', poke: Tribal Scyther

     

    [17/07/2020 11:58:29] [Error - Npc interface] 
    [17/07/2020 11:58:29] data/npc/scripts/pvp/.aHunter.lua:onThink
    [17/07/2020 11:58:29] Description: 
    [17/07/2020 11:58:29] (luaGetThingFromPos) Tile not found

    SCRIPT DO NPC

    Spoiler

    local target = 0
    local prevTarget = 0
    local origPos = 0
    local max_distance = 12
    local fighting = false
    local challenger = 0
    local battle_turn = 1        -- don't change
    local challenger_turn = 0    -- don't change
    ---
    --/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////--
    local function doSummonGymPokemon(npc)
        local this = npc
        if not isCreature(this) or not ehNPC(this) then return true end  --alterado v1.6
        if #getCreatureSummons(this) >= 1 or target == 0 then return true end
        local it = wildHunter[getPlayerStorageValue(this, 665471)][battle_turn]
        if not it then return true end
        doSummonMonster(this, it.name)              
        local summon = getCreatureSummons(this)[1]
        if not summon then                                              --alterado v1.6
           print("Error in npc: "..getCreatureName(this)..", tring to execute function 'doSummonGymPokemon', poke: "..it.name)
           battle_turn = battle_turn+1
           return true 
        end
        local balleffect = pokeballs["normal"].effect
            if it.ball and pokeballs[it.ball] then
                balleffect = pokeballs[it.ball].effect
            end
        doSendMagicEffect(getThingPos(summon), balleffect)
        setPlayerStorageValue(summon, 10000, balleffect)
        setPlayerStorageValue(summon, 10001, gobackmsgs[math.random(#gobackmsgs)].back:gsub("doka", it.nick ~= "" and it.nick or it.name))
        setPlayerStorageValue(summon, 1007, it.nick ~= "" and it.nick or it.name)
        doSetMonsterGym(summon, target)
        addEvent(adjustWildPoke, 15, summon, it.optionalLevel)
        if it.nick ~= "" then doCreatureSetNick(summon, it.nick) end
        local name = it.nick ~= "" and it.nick or getCreatureName(this).."s "..it.name    --alterado v1.3
        doCreatureSay(this, gobackmsgs[math.random(#gobackmsgs)].go:gsub("doka", getPlayerStorageValue(summon, 1007)), 1)
        fighting = true
        battle_turn = battle_turn + 1
    end
    --/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////--
    local function goToOrigPos()
    target = 0
    selfFollow(0)
    fighting = false
    challenger = 0
    challenger_turn = 0
    if #getCreatureSummons(getNpcCid()) >= 1 then
       setPlayerStorageValue(getCreatureSummons(getNpcCid())[1], 1006, 0)
       doCreatureAddHealth(getCreatureSummons(getNpcCid())[1], -getCreatureMaxHealth(getCreatureSummons(getNpcCid())[1]))
    end
    doChangeSpeed(getNpcCid(), -getCreatureSpeed(getNpcCid()))
    doTeleportThing(getNpcCid(), origPos)
    end
    --/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////--
    local function updateTarget()
    if(target == 0) then
        local list = getSpectators(getNpcPos(), 9, 9, false)
        for i = 1, table.getn(list) do
            local _target = list
            if(_target ~= 0) then
               if isPlayer(_target) and not getTileInfo(getThingPos(_target)).protection then --alterado v1.8
                  selfSay(hunterTalks[math.random(#hunterTalks)])
                  doNpcSetCreatureFocus(_target) 
                  target = _target
                  prevTarget = target
                  break
               end
            end
        end
    end
    end
    --/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////--
    function onCreatureAppear(cid)
    end

    function onCreatureDisappear(cid)
    end

    function onCreatureMove(creature, oldPos, newPos)
    --
    end
    --/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////--
    function onThink()
    if not isCreature(getNpcCid()) then return false end  --alterado v1.6
    if origPos == 0 then
       origPos = getNpcPos()
    end
    if getPlayerStorageValue(getNpcCid(), 665471) <= 0 then
       setPlayerStorageValue(getNpcCid(), 665471, math.random(1, 5))
       randOutfit(getNpcCid())
    end
    updateTarget()
    ------------------------------------------------------
    if getDistanceBetween(getNpcPos(), origPos) >= max_distance or (isCreature(target) and getTileInfo(getThingPos(target)).protection) or getTileInfo(getThingPos(getNpcCid())).protection then  
    goToOrigPos()                                                                                                                          --alterado v1.9
    end
    ------------------------------------------------------
    if(target == 0) then
    if getPlayerStorageValue(getNpcCid(), 154788) <= 0 then
       setPlayerStorageValue(getNpcCid(), 154788, 1)
       doChangeSpeed(getNpcCid(), -getCreatureSpeed(getNpcCid()))
       addEvent(randWalk, 2000, getNpcCid(), 1000, getPlayerStorageValue(getNpcCid(), 154788))
    end
    return true
    end 
    ------------------------------------------------------
    local playerPos = getThingPosWithDebug(target)   --alterado v1.6
    local myPos = getNpcPos()
    ------------------------------------------------------
    if(myPos.z ~= playerPos.z) then
    goToOrigPos()
    battle_turn = battle_turn == 1 and battle_turn or battle_turn-1
    return true
    end
    ------------------------------------------------------
    if getDistanceBetween(playerPos, myPos) > max_distance then
    goToOrigPos()
    battle_turn = battle_turn == 1 and battle_turn or battle_turn-1
    return true
    end
    ------------------------------------------------------
    if getDistanceBetween(playerPos, myPos) >= 5 then
    if getPlayerStorageValue(getNpcCid(), 154788) >= 1 then
       setPlayerStorageValue(getNpcCid(), 154788, -1)
       doRegainSpeed(getNpcCid()) 
       if isCreature(target) then
          selfFollow(target)
       end
    end
    end
    ------------------------------------------------------
    if getDistanceBetween(playerPos, myPos) <= 3 then
    if getPlayerStorageValue(getNpcCid(), 154788) <= 0 then
       setPlayerStorageValue(getNpcCid(), 154788, 1)
       doChangeSpeed(getNpcCid(), -getCreatureSpeed(getNpcCid()))
       addEvent(randWalk, 2000, getNpcCid(), 1000, getPlayerStorageValue(getNpcCid(), 154788))
    end
    end
    ------------------------------------------------------
    if getDistanceBetween(playerPos, myPos) <= 5 then
       challenger = target
       addEvent(doSummonGymPokemon, 1000, getNpcCid())

    local change = false

    if not isCreature(target) then
       target = 0
       battle_turn = battle_turn == 1 and battle_turn or battle_turn-1
       return true
    end

    if fighting then

       if not isCreature(getCreatureTarget(getNpcCid())) then
          if #getCreatureSummons(challenger) >= 1 then
             selfAttackCreature(getCreatureSummons(challenger)[1])
             change = true
          else
              if change then
                 change = false
                 challenger_turn = challenger_turn + 1
              end
          end
       end
            
       if #getCreatureSummons(getNpcCid()) == 0 and isCreature(target) then
          if battle_turn > #wildHunter[getPlayerStorageValue(getNpcCid(), 665471)] then      
             addEvent(doCreateNpc, 300000, ".aHunter", myPos)  --alterado v1.5
             local outfit = getCreatureOutfit(getNpcCid())
             doRemoveCreature(getNpcCid())
             ----------------------------------------
             if outfit.lookType == 1016 then      --verifica se o npc eh female.. ?
                 monster = doCreateMonster("aHunterFemale", myPos)
             else
                 monster = doCreateMonster("aHunter", myPos)
             end
             ----------------------------------------
             doCloneOut(monster, outfit)
             addEvent(beDrunk, 100, monster)
          end
             addEvent(doSummonGymPokemon, 1000, getNpcCid())
       end

       if #getCreatureSummons(challenger) <= 0 then
          selfAttackCreature(challenger) 
       end  
    end
    end
    end

     

  12. 3 horas atrás, Yan18 disse:

    Vou colocar em spoiler porque a página buga quando tem muitos texto grandes:

     

      Ocultar conteúdo

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

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

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

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

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

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

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

       doItemSetAttribute(item, "poke", pokemon)
       doItemSetAttribute(item, "hp", 1)
       doItemSetAttribute(item, "happy", happy)
       --doItemSetAttribute(item, "-1", GENDER)
       doSetItemAttribute(item, "hands", 0)
       doItemSetAttribute(item, "description", "Contains a "..pokemon..".")
       doItemSetAttribute(item, "fakedesc", "Contains a "..pokemon..".") 
       doItemSetAttribute(item, "defeated", "no")
       doItemSetAttribute(item, "ball", btype)
       doItemSetAttribute(item, "tadport", fotos[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
       doTransformItem(item, id)
    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 doRevivePokemon(cid, pokemon)
      if getPlayerItemCount(cid, 12344) <= 0 then return doPlayerSendCancel(cid, "Voce nao tem nenhum revive.") end
      local cooldownMoves = {
        ["Selfdestruct"] = 30,
        ["Selfdestruction"] = 30,
      }
      local balls = getPokeballsInContainerNew(getPlayerSlotItem(cid, 3).uid)
      if isPokeball(getPlayerSlotItem(cid, CONST_SLOT_FEET).itemid) then
        table.insert(balls, getPlayerSlotItem(cid, CONST_SLOT_FEET))
      end
      for i =1, #balls do
        local ball = balls
        -- print("Pokemon: "..pokemon.." attrpoke> "..(getItemAttribute(ball.uid, "poke") or "sempoke").." attrnick> "..(getItemAttribute(ball.uid, "nick") or "sem nick"))
        if getItemAttribute(ball.uid, "poke") == pokemon or getItemAttribute(ball.uid, "nick") == pokemon then
          -- print("IGUAL")
          for type, index in pairs(pokeballs) do
            -- print(index.on.." / "..index.off)
            if ball.itemid == index.on or ball.itemid == index.off then
              -- print("revive")
              doTransformItem(ball.uid, index.on)
              doSetItemAttribute(ball.uid, "hp", 1)
              local name = getItemAttribute(ball.uid, "poke")
              for c = 1, 15 do
                local str = "move"..c
                local move = movestable[name][str]; move = move and cooldownMoves[move.name]
                setCD(ball.uid, str, move or 0)
              end
              setCD(ball.uid, "control", 0)
              setCD(ball.uid, "blink", 0) --alterado v1.6
              doSendMagicEffect(getThingPos(cid), 13)
              doPlayerRemoveItem(cid, 12344, 1)
              doCureBallStatus(ball.uid, "all")
              doUpdatePokemonsBar(cid)
              cleanBuffs2(ball.uid) --alterado v1.5
              return
            end
          end
        end
      end
    end

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

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

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

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

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

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

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

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

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

    function 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) or 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*500, 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"},
    ["ancient"] = {ancient, "ancient"},
    ["metal"] = {metal, "metal"},
    ["ice"] = {ice, "ice"},
    ["boost"] = {boostStone, "boost"},  --alterado v1.9
    }

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

    function doConvertStoneIdToString(stoneID)
    local t = {
    [11453] = "Heart Stone",
    [11441] = "Leaf Stone",
    [11442] = "Water Stone",
    [11443] = "Venom Stone",
    [11444] = "Thunder Stone",
    [11445] = "Rock Stone",
    [11446] = "Punch Stone", 
    [11447] = "Fire Stone",               --alterado v1.6
    [11448] = "Cocoon Stone", 
    [11449] = "Crystal Stone",
    [11450] = "Darkess Stone", 
    [11451] = "Earth Stone",
    [11452] = "Enigma Stone",
    [11454] = "Ice Stone", 
    [12244] = "Ancient Stone",
    [12232] = "Metal Stone",
    [12401] = "Shiny Fire Stone",
    [12402] = "Shiny Water Stone",
    [12403] = "Shiny Leaf Stone",
    [12404] = "Shiny Heart Stone",
    [12405] = "Shiny Enigma Stone",
    [12406] = "Shiny Rock Stone",
    [12407] = "Shiny Venom Stone", 
    [12408] = "Shiny Ice Stone",
    [12409] = "Shiny Thunder Stone",
    [12410] = "Shiny Crystal Stone",
    [12411] = "Shiny Cocoon Stone",
    [12412] = "Shiny Darkness Stone",
    [12413] = "Shiny Punch Stone",
    [12414] = "Shiny Earth Stone",
    [boostStone] = "Boost Stone",  --alterado v1.9
    [20897] = "Virus",
    [20898] = "Glice Stone",
    [20899] = "Green Stone",
    [20900] = "Mag Stone",
    [20901] = "Electri Stone",
    [20902] = "Perior Stone",
    [20903] = "Kiss Stone",
    [20904] = "Shiny Stone",
    [20905] = "Zone Stone",
    [21996] = "Llade Stone",
    [21997] = "Scor Stone",
    [21998] = "Licky Stone",
    [21999] = "Poryz Stone",
    [22000] = "Probo Stone",
    [22001] = "Wea Stone",
    [22002] = "Yanm Stone",
    [22003] = "Fros Stone",
    [22004] = "Special Stone",
    [22067] = "Super Darkness Stone",
    [22068] = "Super Ice Stone",
    [22071] = "Super Fire Stone",
    [22072] = "Super Water Stone",
    }
    if t[stoneID] then
    return t[stoneID]
    else
    return ""
    end
    end

    function isStone(id)
    if id >= leaf and id <= ice then
    return true
    end
    if id == boostStone then  --alterado v1.9
    return true
    end
    if id == 12232 or id == 12244 or id == 12244 or id == 12245 then
    return true                                 
    end
    if id == 20904 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, ?

        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, ?
        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, 19)

        doSendMagicEffect(getCreaturePosition(pokemon), effect)

        doRemoveCreature(pokemon)

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

    end

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

    function doGoPokemon(cid, item)

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

       btype = getPokeballType(item.itemid)                   

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

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

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

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

        if not pokes[pokemon] then
        return true
        end

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

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

        if getPlayerLevel(cid) < (x.level + boosts) then   --alterado v1.8 \/
        doPlayerSendCancel(cid, "You need level "..(x.level + boosts).." to use this pokemon.")
        return true
        end
        
        --------------------------------------------------------------------------------------
        shinysClan = {
        ["Shiny Fearow"] = {4, "Wingeon"},
        ["Shiny Flareon"] = {1, "Volcanic"},
        ["Shiny Vaporeon"] = {2, "Seavel"}, 
        ["Shiny Jolteon"] = {9, "Raibolt"},
        ["Shiny Hypno"] = {7, "Psycraft"},
        ["Shiny Golem"] = {3, "Orebound"},         
        ["Shiny Vileplume"] = {8, "Naturia"},
        ["Shiny Nidoking"] = {5, "Malefic"},
        ["Shiny Hitmontop"] = {6, "Gardestrike"},   
        ["Shiny Metagross"] = {9, "Ironhead"},
        }
        
        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

        
    local pk = getCreatureSummons(cid)[1]
    local pb = getPlayerSlotItem(cid, 8).uid
    local look = getItemAttribute(pb,"addon")
    if not look then
    doSetItemAttribute(pb,"addon",0)

    end
    if look > 0 then
    doSetCreatureOutfit(pk, {lookType = look}, -1)

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

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

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

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

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

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

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

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

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

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

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

    return multiplier
    end

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

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

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

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

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

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

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

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

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

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

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

    function setCD(item, tipo, tempo)

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

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

    function getCD(item, tipo, limite)

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

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

        if number <= 0 then
        return 0
        end

        if limite and limite < number then
            return 0
        end

    return number
    end

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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


    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
    break
    end
    else
    return doPlayerAddItem(cid, itemid, quant)
    end
    if piles == #item then
    doPlayerAddItem(cid, itemid, quant)
    end
    end

    function getDirectionToWalk(p1, pos2)
        local dir = NORTH
        local pos1 = getCreaturePosition(p1)
        if(pos1.x > pos2.x) then
            dir = WEST
            if(pos1.y > pos2.y) then
                dir = NORTHWEST
            elseif(pos1.y < pos2.y) then
                dir = SOUTHWEST
            end
        elseif(pos1.x < pos2.x) then
            dir = EAST
            if(pos1.y > pos2.y) then
                dir = NORTHEAST
            elseif(pos1.y < pos2.y) then
                dir = SOUTHEAST
            end
        else
            if(pos1.y > pos2.y) then
                dir = NORTH
            elseif(pos1.y < pos2.y) then
                dir = SOUTH
            end
        end
        return dir
    end

     function getNextStepDelay(cid, dir)
                return tonumber(398)
        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 hasTile(pos)    --Verifica se tem TILE na pos
    pos.stackpos = 0
    if getTileThingByPos(pos).itemid >= 1 then
       return true
    end
    return false
    end
    function doPlayerAddItemStacking(cid, itemid, quant)


    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
    break
    end
    else
    return doPlayerAddItem(cid, itemid, quant)
    end
    if piles == #item then
    doPlayerAddItem(cid, itemid, quant)
    end
    end

    function isFly(cid)
       if getPlayerStorageValue(cid, orderTalks["fly"].storage) == 1 then
          return true 
       end
       return false
    end


    function doOTCSendPokemonHealth(cid)
        local ball = getPlayerSlotItem(cid, CONST_SLOT_FEET)
        local pokemon = getCreatureSummons(cid)
        if not ball.uid or ball.uid <= 1 then
            return doSendPlayerExtendedOpcode(cid, 122, "0|0")
        end
        if #pokemon >= 1 then
            return doSendPlayerExtendedOpcode(cid, 122, getCreatureHealth(pokemon[1]).."|"..getCreatureMaxHealth(pokemon[1]))
        end
    end

    ---- FUNÇÃO SELF ATTACK CREATURE ----
    function selfAttackCreature()
    if #getCreatureSummons(getNpcCid()) > 0 and not isCreature(getCreatureTarget(getCreatureSummons(getNpcCid())[1])) then
        local list = getSpectators(getCreaturePosition(getNpcCid()), 7, 7, false)
        for i=0, table.getn(list) do
            local _target = list
            if(_target ~= 0) then
                if isPlayer(_target) and not getTileInfo(getThingPos(_target)).protection then
                    if #getCreatureSummfighting = falseons(_target) > 0 then
                        doMonsterSetTarget(getCreatureSummons(getNpcCid())[1], getCreatureSummons(_target)[1])
                        setPlayerStorageValue(getCreatureSummons(getNpcCid())[1], 99856201, getNpcCid())
                    else
                      fighting = false
                    end
                    target = _target
                    break
                end
            end
        end
    end

    end

     

    Pronto, já está adicionado! Só lembrando que tirei o local porque essa vai ser uma função global, ou seja, vai poder ser usada em qualquer outro arquivo da pasta Data do servidor.

     

    Testa agora e vê se resolve seu problema.

    Deu este BUG ao liga o server

    Spoiler

    [16/07/2020 22:47:05] [Error - LuaScriptInterface::loadFile] data/lib/some functions.lua:1977: 'then' expected near '='
    [16/07/2020 22:47:05] [Warning - LuaScriptInterface::initState] Cannot load data/lib/
    [16/07/2020 22:47:05] [Error - LuaScriptInterface::loadFile] data/lib/some functions.lua:1977: 'then' expected near '='
    [16/07/2020 22:47:05] [Warning - LuaScriptInterface::initState] Cannot load data/lib/

     

  13. 4 horas atrás, Yan18 disse:

    Posso colocar sim, sem problemas. Mas, é bem simples, vai na última linha do arquivo que vai colocar e vai no último end, da enter e cola a função em baixo (recomendo comentar em cima do nome da função para saber o que faz), não tem segredo.

     

    Sobre qual arquivo ser melhor, não importa muito onde vai colocar na pasta lib, depende da maneira como quer deixar organizado e separado os arquivos do seu servidor, pode colocar em algum arquivo onde tem funções novas do seu servidor (caso tenha). Mas, pode colocar em some functions.lua mesmo, acho que fica mais fácil para procurar depois.

    function getStringOfTaskArray(array)
       if type(array) ~= 'table' or not next(array) then return "" end
       
       local result = {}
        for _, value in ipairs(array) do
    	    local thing, num = (type(value[1]) == 'string' and value[1] or getItemNameById(value[1])), value[2]
    		table.insert(result, (_ == 1 and "" or ", ")..num.." "..thing..(num == 1 and "" or "s"))
        end
    	result[#result] = " and"..(result[#result]:sub(2,#result[#result]))
    	return table.concat(result)
    end
    
    function getVitalityByMaster(cid)
    if not isCreature(cid) then return 0 end
    local ball = getPlayerSlotItem(cid, 8).uid
    if not ball or ball <= 1 or not pokes[getItemAttribute(ball, 'poke')] then return true end
       return pokes[getItemAttribute(ball, 'poke')].vitality * (getPlayerLevel(cid) + (getItemAttribute(ball, 'boost') or 0))
    end
    
    function onPokeHealthChange(cid, zerar)
       if not isCreature(cid) then return true end
       if zerar then doPlayerSendCancel(cid, '#ph#,0,0') end
       local ball = getPlayerSlotItem(cid, 8).uid
       if not ball or ball <= 1 or not pokes[getItemAttribute(ball, 'poke')] then return true end
       
       if #getCreatureSummons(cid) >= 1 and getPlayerStorageValue(cid, 212124) <= 0 then   --alterado v1.6
          local pokemon = getCreatureSummons(cid)[1]
          local pokelife = (getCreatureHealth(pokemon) / getCreatureMaxHealth(pokemon))
          doItemSetAttribute(ball, "hp", pokelife)
       end
       
          local rd = 1 - (tonumber(getItemAttribute(ball, "hp")))
       local maxHp = HPperVITsummon * getVitalityByMaster(cid) 
       local hp = maxHp -(maxHp * rd)   
       doPlayerSendCancel(cid, '#ph#,'.. math.floor(hp) ..','.. math.floor(maxHp))
    end
    
    function addPokeToPlayer(cid, pokemon, boost, gender, ball)             --alterado v1.9 \/ peguem ele todo...
    local genders = {
    ["male"] = 4,
    ["female"] = 3,
    [1] = 4,
    [0] = 3,
    [4] = 4,
    [3] = 3,
    }
    if not isCreature(cid) then return false end
    
    local pokemon = doCorrectString(pokemon)
    if not pokes[pokemon] then return false end
    
       local GENDER = (gender and genders[gender]) and genders[gender] or getRandomGenderByName(pokemon)
       local btype = (ball and pokeballs[ball]) and ball or isShinyName(pokemon) and "shinynormal" or "normal"
       local happy = 250
       
       if icons[pokemon] then
          id = icons[pokemon].on
       else
          id = pokeballs[btype].on
       end
    
       if (getPlayerFreeCap(cid) >= 6 and not isInArray({5, 6}, getPlayerGroupId(cid))) or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then 
          item = doCreateItemEx(id)
       else
          item = addItemInFreeBag(getPlayerSlotItem(cid, 3).uid, id, 1)   
       end
       if not item then return false end
    
       doItemSetAttribute(item, "poke", pokemon)
       doItemSetAttribute(item, "hp", 1)
       doItemSetAttribute(item, "happy", happy)
       --doItemSetAttribute(item, "-1", GENDER)
       doSetItemAttribute(item, "hands", 0)
       doItemSetAttribute(item, "description", "Contains a "..pokemon..".")
       doItemSetAttribute(item, "fakedesc", "Contains a "..pokemon..".") 
       doItemSetAttribute(item, "defeated", "no")
       doItemSetAttribute(item, "ball", btype)
       doItemSetAttribute(item, "tadport", fotos[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
       doTransformItem(item, id)
    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 doRevivePokemon(cid, pokemon)
      if getPlayerItemCount(cid, 12344) <= 0 then return doPlayerSendCancel(cid, "Voce nao tem nenhum revive.") end
      local cooldownMoves = {
        ["Selfdestruct"] = 30,
        ["Selfdestruction"] = 30,
      }
      local balls = getPokeballsInContainerNew(getPlayerSlotItem(cid, 3).uid)
      if isPokeball(getPlayerSlotItem(cid, CONST_SLOT_FEET).itemid) then
        table.insert(balls, getPlayerSlotItem(cid, CONST_SLOT_FEET))
      end
      for i =1, #balls do
        local ball = balls[i]
    	-- print("Pokemon: "..pokemon.." attrpoke> "..(getItemAttribute(ball.uid, "poke") or "sempoke").." attrnick> "..(getItemAttribute(ball.uid, "nick") or "sem nick"))
        if getItemAttribute(ball.uid, "poke") == pokemon or getItemAttribute(ball.uid, "nick") == pokemon then
    	  -- print("IGUAL")
          for type, index in pairs(pokeballs) do
    	    -- print(index.on.." / "..index.off)
    	    if ball.itemid == index.on or ball.itemid == index.off then
    		  -- print("revive")
    		  doTransformItem(ball.uid, index.on)
              doSetItemAttribute(ball.uid, "hp", 1)
              local name = getItemAttribute(ball.uid, "poke")
              for c = 1, 15 do
                local str = "move"..c
                local move = movestable[name][str]; move = move and cooldownMoves[move.name]
                setCD(ball.uid, str, move or 0)
              end
              setCD(ball.uid, "control", 0)
              setCD(ball.uid, "blink", 0) --alterado v1.6
              doSendMagicEffect(getThingPos(cid), 13)
    		  doPlayerRemoveItem(cid, 12344, 1)
              doCureBallStatus(ball.uid, "all")
    		  doUpdatePokemonsBar(cid)
    	      cleanBuffs2(ball.uid) --alterado v1.5
    		  return
    		end
    	  end
    	end
      end
    end
    
    function getPokeballsInContainerNew(container)
      if not isContainer(container) then return {} end
      local items = {}
      if isContainer(container) and getContainerSize(container) > 0 then
      	for slot=0, (getContainerSize(container)-1) do
          local item = getContainerItem(container, slot)
          if isContainer(item.uid) then
          	local itemsbag = getPokeballsInContainerNew(item.uid)
          	for i=0, #itemsbag do
              table.insert(items, itemsbag[i])
          	end
          elseif isPokeball(item.itemid) then
          	table.insert(items, item)
          end
      	end
      end
      return items
    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[i]) then
                               table.insert(items, itemsbag[i])
                            end
    					end
    				elseif isPokeball(item.itemid) then
    				    for a, b in pairs (pokeballs) do
                            if item.itemid == b.on then
                               if duel and getPlayerLevel(cid) >= (pokes[getItemAttribute(item.uid, "poke")].level + getPokeballBoost(item)) then    
    					          table.insert(items, item.uid)                                            --alterado v1.8
                               elseif not duel then
                                  table.insert(items, item.uid)
                               end
    	                    end
                        end
    				end
    		end
    	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[i]
            horarioComp = string.explode(horarioComparacao, ":")
            ---------------
            if tonumber(horarioComp[1]) > tonumber(horario[1]) then
               return horarioComparacao                                
            elseif tonumber(horarioComp[1]) == tonumber(horario[1]) and tonumber(horario[2]) < tonumber(horarioComp[2]) then
               return horarioComparacao
            end
        end 
        return horas[1]                                  
    end                                                               
    
    function getTimeDiff(timeDiff)
    local dateFormat = {
    {'hour', timeDiff / 60 / 60}, --6%
    {'min', timeDiff / 60 % 60},
    }
    local out = {}                                   
    for k, t in ipairs(dateFormat) do
        local v = math.floor(t[2])
        if(v > -1) then
             table.insert(out, (k < #dateFormat and '' or ' and ') .. v .. '' .. (v <= 1 and t[1] or t[1].."s"))
        end
    end
    if tonumber(dateFormat[1][2]) == 0 and tonumber(dateFormat[2][2]) == 0 then
       return "seconds"
    end
    return table.concat(out)
    end
    
    function getTimeDiff2(timeDiff)
    local dateFormat = {
    {'hour', timeDiff / 60 / 60}, --6%
    {'min', timeDiff / 60 % 60},
    {'sec', timeDiff % 60},
    }
    local out = {}                                  
    for k, t in ipairs(dateFormat) do
        local v = math.floor(t[2])
        if(v > 0) then
             table.insert(out, (k < #dateFormat and ' ' or ' and ') .. v .. '' .. (v <= 1 and t[1] or t[1].."s"))
        end
    end
    return table.concat(out)
    end 
    
    function showTimeDiff(timeComp)
    local b = string.explode(os.date("%X"), ":")
    local c = string.explode(timeComp, ":")
        ---
        local d, m, y = os.date("%d"), os.date("%m"), os.date("%Y")
        local hAtual, mAtual = tonumber(b[1]), tonumber(b[2])
        local hComp, mComp = tonumber(c[1]), tonumber(c[2])
        ---
        local t = os.time{year= y, month= m, day= d, hour= hAtual, min= mAtual}
        local t1 = os.time{year= y, month= m, day= d, hour= hComp, min= mComp}
        ---                                                                       
        comparacao = t1-t
        if hComp < hAtual then
           v = os.time{year= y, month= m, day= d, hour= 24, min= 0}
           v2 = os.time{year= y, month= m, day= d, hour= 0, min= 0}
           comparacao = (v-t)+(t1-v2)
        end
    return getTimeDiff(comparacao)
    end
    -------------------------------------------------------------------------
    function cleanCMcds(item)
    if item ~= 0 then
       for c = 1, 15 do              --alterado v1.5
          local str = "cm_move"..c
          setCD(item, str, 0)
       end
    end
    end
    
    function ehNPC(cid)   --alterado v1.9
    return isCreature(cid) and not isPlayer(cid) and not isSummon(cid) and not isMonster(cid)
    end
    
    function ehMonstro(cid)
    local eh = false
        if not isSummon(cid) and not ehNPC(cid) and not isPlayer(cid) then
            eh = true
        end
        return eh
    end                                                      --alterado v1.9.1 /\
    
    function doAppear(cid) --Faz um poke q tava invisivel voltar a ser visivel...
    if not isCreature(cid) then return true end
    doRemoveCondition(cid, CONDITION_INVISIBLE)
    doRemoveCondition(cid, CONDITION_OUTFIT)
    doCreatureSetHideHealth(cid, false)
    end
    
    function doDisapear(cid)   --Faz um pokemon ficar invisivel
    if not isCreature(cid) then return true end
    doCreatureAddCondition(cid, permanentinvisible)
    doCreatureSetHideHealth(cid, true)
    doSetCreatureOutfit(cid, {lookType = 2}, -1)
    end
    
    function 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) or 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*500, 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[i]), 211)
             doRemoveCreature(summon[i])
         end
         setPlayerStorageValue(cid, 637501, -1)
      end  
    end
        
    function choose(...) -- by mock
        local arg = {...}
        return arg[math.random(1,#arg)]
    end
    
    function AddPremium(cid, days)
    local function removerPlayer(cid)
    if isCreature(cid) then
       doRemoveCreature(cid)
    end
    end
    
    db.executeQuery("UPDATE `accounts` SET `premdays` = '"..days.."' WHERE `accounts`.`id` = ".. getPlayerAccountId(cid) ..";")
    doPlayerSendTextMessage(cid,25,"Você será kickado em 5 segundos.")    
    addEvent(removerPlayer, 5*1000, cid)     
    return TRUE
    end
    
    function isShiny(cid) 
    return isCreature(cid) and string.find(getCreatureName(cid), "Shiny")  --alterado 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"},
    ["ancient"] = {ancient, "ancient"},
    ["metal"] = {metal, "metal"},
    ["ice"] = {ice, "ice"},
    ["boost"] = {boostStone, "boost"},  --alterado v1.9
    }
    
    if string then
    return t[type][2]
    else
    return t[type][1]
    end
    end
    
    function doConvertStoneIdToString(stoneID)
    local t = {
    [11453] = "Heart Stone",
    [11441] = "Leaf Stone",
    [11442] = "Water Stone",
    [11443] = "Venom Stone",
    [11444] = "Thunder Stone",
    [11445] = "Rock Stone",
    [11446] = "Punch Stone", 
    [11447] = "Fire Stone",               --alterado v1.6
    [11448] = "Cocoon Stone", 
    [11449] = "Crystal Stone",
    [11450] = "Darkess Stone", 
    [11451] = "Earth Stone",
    [11452] = "Enigma Stone",
    [11454] = "Ice Stone", 
    [12244] = "Ancient Stone",
    [12232] = "Metal Stone",
    [12401] = "Shiny Fire Stone",
    [12402] = "Shiny Water Stone",
    [12403] = "Shiny Leaf Stone",
    [12404] = "Shiny Heart Stone",
    [12405] = "Shiny Enigma Stone",
    [12406] = "Shiny Rock Stone",
    [12407] = "Shiny Venom Stone", 
    [12408] = "Shiny Ice Stone",
    [12409] = "Shiny Thunder Stone",
    [12410] = "Shiny Crystal Stone",
    [12411] = "Shiny Cocoon Stone",
    [12412] = "Shiny Darkness Stone",
    [12413] = "Shiny Punch Stone",
    [12414] = "Shiny Earth Stone",
    [boostStone] = "Boost Stone",  --alterado v1.9
    [20897] = "Virus",
    [20898] = "Glice Stone",
    [20899] = "Green Stone",
    [20900] = "Mag Stone",
    [20901] = "Electri Stone",
    [20902] = "Perior Stone",
    [20903] = "Kiss Stone",
    [20904] = "Shiny Stone",
    [20905] = "Zone Stone",
    [21996] = "Llade Stone",
    [21997] = "Scor Stone",
    [21998] = "Licky Stone",
    [21999] = "Poryz Stone",
    [22000] = "Probo Stone",
    [22001] = "Wea Stone",
    [22002] = "Yanm Stone",
    [22003] = "Fros Stone",
    [22004] = "Special Stone",
    [22067] = "Super Darkness Stone",
    [22068] = "Super Ice Stone",
    [22071] = "Super Fire Stone",
    [22072] = "Super Water Stone",
    }
    if t[stoneID] then
    return t[stoneID]
    else
    return ""
    end
    end
    
    function isStone(id)
    if id >= leaf and id <= ice then
    return true
    end
    if id == boostStone then  --alterado v1.9
    return true
    end
    if id == 12232 or id == 12244 or id == 12244 or id == 12245 then
    return true                                 
    end
    if id == 20904 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, 19)
    
    	doSendMagicEffect(getCreaturePosition(pokemon), effect)
    
    	doRemoveCreature(pokemon)
    
        unLock(pokeball.uid) --alterado v1.8
        
        if useOTClient then
           doPlayerSendCancel(cid, '12//,hide')  --alterado v1.7
        end
        
    	if useKpdoDlls then
    		doUpdateMoves(cid)
    	end
    
    end
    
    local EFFECTS = {
    	--[OutfitID] = {Effect}
    	["Magmar"] = 35,                --alterado v1.5
    	["Shiny Magmar"] = 35,
    	["Magby"] = 35,
    	["Jynx"] = 17,   
    	["Smoochum"] = 17, 
    	["Shiny Jynx"] = 17,    
    	["Piloswine"] = 205,  --alterado v1.8
        ["Swinub"] = 205, 
        ["Stantler"] = 205, 
        ["Shiny Stantler"] = 205, 
    }
    
    function doGoPokemon(cid, item)
    
    	if getPlayerStorageValue(cid, 17000) >= 1 or getPlayerStorageValue(cid, 17001) >= 1 or getPlayerStorageValue(cid, 63215) >= 1 then
    	return true
    	end
    ---------------------------------------------------------------
    local ballName = getItemAttribute(item.uid, "poke")
    
       btype = getPokeballType(item.itemid)                   
    
    	local effect = pokeballs[btype].effect
    		if not effect then
    			effect = 21
    		end
    -----------------------------------------------------------------
    	if item.uid ~= getPlayerSlotItem(cid, CONST_SLOT_FEET).uid then
    		doPlayerSendCancel(cid, "You must put your pokeball in the correct place!")
    	return TRUE
    	end
    
    	local thishp = getItemAttribute(item.uid, "hp")
    
    	if thishp <= 0 then
    		if isInArray(pokeballs[btype].all, item.itemid) then
    			doTransformItem(item.uid, pokeballs[btype].off)
    			doItemSetAttribute(item.uid, "hp", 0)
    			doPlayerSendCancel(cid, "This pokemon is fainted.")
    		    return true
    		end
    	end
    
    	local pokemon = getItemAttribute(item.uid, "poke")
    
    	if not pokes[pokemon] then
    	return true
    	end
    
    ----------------------- Sistema de nao poder carregar mais que 3 pokes lvl baixo e + q 1 poke de lvl medio/alto ---------------------------------
    if not isInArray({5, 6}, getPlayerGroupId(cid)) then
       local balls = getPokeballsInContainer(getPlayerSlotItem(cid, 3).uid)      --alterado v1.9 \/
       local low = {}
       local lowPokes = {"Rattata", "Caterpie", "Weedle", "Oddish", "Pidgey", "Paras", "Poliwag", "Bellsprout", "Magikarp", "Hoppip", "Sunkern"}
       if #balls >= 1 then
          for _, uid in ipairs(balls) do
              local nome = getItemAttribute(uid, "poke")
              if not isInArray(lowPokes, pokemon) and nome == pokemon then
                 return doPlayerSendTextMessage(cid, 27, "Sorry, but you can't carry two pokemons equals!")
              else
                 if nome == pokemon then
                    table.insert(low, nome)
                 end
              end
          end
       end
    if #low >= 3 then
       return doPlayerSendTextMessage(cid, 27, "Sorry, but you can't carry more than three pokemons equals of low level!")
    end   
    end
    ---------------------------------------------------------------------------------------------------------------------------------------------------
    
    	local x = pokes[pokemon]
    	local boosts = getItemAttribute(item.uid, "boost") or 0
    
    	if getPlayerLevel(cid) < (x.level + boosts) then   --alterado v1.8 \/
    	doPlayerSendCancel(cid, "You need level "..(x.level + boosts).." to use this pokemon.")
    	return true
    	end
    	
    	--------------------------------------------------------------------------------------
    	shinysClan = {
    	["Shiny Fearow"] = {4, "Wingeon"},
    	["Shiny Flareon"] = {1, "Volcanic"},
    	["Shiny Vaporeon"] = {2, "Seavel"}, 
    	["Shiny Jolteon"] = {9, "Raibolt"},
    	["Shiny Hypno"] = {7, "Psycraft"},
    	["Shiny Golem"] = {3, "Orebound"},         
    	["Shiny Vileplume"] = {8, "Naturia"},
    	["Shiny Nidoking"] = {5, "Malefic"},
    	["Shiny Hitmontop"] = {6, "Gardestrike"},   
    	["Shiny Metagross"] = {9, "Ironhead"},
    	}
    	
    	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
    
    	
    local pk = getCreatureSummons(cid)[1]
    local pb = getPlayerSlotItem(cid, 8).uid
    local look = getItemAttribute(pb,"addon")
    if not look then
    doSetItemAttribute(pb,"addon",0)
    
    end
    if look > 0 then
    doSetCreatureOutfit(pk, {lookType = look}, -1)
    
    end	
    	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 getRecorderCreature(pos, cid)
    	local ret = 0
    	if cid and isPosEqual(getThingPos(cid), pos) then   --alterado v1.9
    	   return cid
    	end
    	local s = {}
    	s.x = pos.x
    	s.y = pos.y
    	s.z = pos.z
    		for a = 0, 255 do
    			s.stackpos = a
    			local b = getTileThingByPos(s).uid
    			if b > 1 and isCreature(b) and getCreatureOutfit(b).lookType ~= 814 then
    				ret = b
    			end
    		end
    return ret
    end
    
    function doCreatureSetOutfit(cid, outfit, time)
    	doSetCreatureOutfit(cid, outfit, time)
    end
    
    function doMagicalFlower(cid, away)
    	if not isCreature(cid) then return true end
    	for x = -3, 3 do
    		for y = -3, 3 do
    		local a = getThingPos(cid)
    		a.x = a.x + x
    		a.y = a.y + y
    			if away then
    				doSendDistanceShoot(a, getThingPos(cid), 21)
    			else
    				doSendDistanceShoot(getThingPos(cid), a, 21)
    			end
    		end
    	end
    end		
    
    function isItemPokeball(item)         --alterado v1.9 \/
    if not item then return false end
    for a, b in pairs (pokeballs) do
    	if isInArray(b.all, item) then return true end
    	if item >= 12861 and item <= 13781 then
    	return true
    	end
    	if item >= 13797 and item <= 13823 then
    	return true
    	end
            if item >= 10975 and item <= 10977 then
            return true
    	end
    	if item >= 13836 and item <= 13850 then
    	return true
    	end
    	if item >= 13851 and item <= 13856 then
    	return true
    	end
    	if item >= 13859 and item <= 13861 then
    	return true
    	end
    	if item >= 13902 and item <= 13904 then
    	return true
    	end
    	if item >= 13919 and item <= 13930 then
    	return true
    	end
    end
    return false
    end
    
    function isPokeball(item)
    if not item then return false end
    for a, b in pairs (pokeballs) do
    	if isInArray(b.all, item) then return true end
    	if item >= 12861 and item <= 13781 then
    	return true
    	end
    	if item >= 13797 and item <= 13823 then
    	return true
    	end
            if item >= 10975 and item <= 10977 then
            return true
    	end
    	if item >= 13836 and item <= 13856 then
    	return true
    	end
    end
    return false
    end
    function getPokeballType(id)
    	for a, b in pairs (pokeballs) do
    		if isInArray(b.all, id) then
    			return a
    		end
    	end
    return "none"
    end
    
    randomdiagonaldir = {
    [NORTHEAST] = {NORTH, EAST},
    [SOUTHEAST] = {SOUTH, EAST},
    [NORTHWEST] = {NORTH, WEST},
    [SOUTHWEST] = {SOUTH, WEST}}
    
    function doFaceOpposite(cid)
    local a = getCreatureLookDir(cid)
    local d = {
    [NORTH] = SOUTH,
    [SOUTH] = NORTH,
    [EAST] = WEST,
    [WEST] = EAST,
    [NORTHEAST] = SOUTHWEST,
    [NORTHWEST] = SOUTHEAST,
    [SOUTHEAST] = NORTHWEST,
    [SOUTHWEST] = NORTHEAST}
    doCreatureSetLookDir(cid, d[a])
    end
    
    function doFaceRandom(cid)
    local a = getCreatureLookDir(cid)
    local d = {
    [NORTH] = {SOUTH, WEST, EAST},
    [SOUTH] = {NORTH, WEST, EAST},
    [WEST] = {SOUTH, NORTH, EAST},
    [EAST] = {SOUTH, WEST, NORTH}}
    doChangeSpeed(cid, 1)
    doCreatureSetLookDir(cid, d[a][math.random(1, 3)])
    doChangeSpeed(cid, -1)
    end
    
    function getFaceOpposite(dir)
    local d = {
    [NORTH] = SOUTH,
    [SOUTH] = NORTH,
    [EAST] = WEST,
    [WEST] = EAST,
    [NORTHEAST] = SOUTHWEST,
    [NORTHWEST] = SOUTHEAST,
    [SOUTHEAST] = NORTHWEST,
    [SOUTHWEST] = NORTHEAST}
    return d[dir]
    end
    
    function getResistance(cid, combat)
    	if isPlayer(cid) then return false end
    local poketype1 = pokes[getCreatureName(cid)].type
    local poketype2 = pokes[getCreatureName(cid)].type2
    local multiplier = 1
    	if effectiveness[combat].super and isInArray(effectiveness[combat].super, poketype1) then
    		multiplier = multiplier * 2
    	end
    	if poketype2 and effectiveness[combat].super and isInArray(effectiveness[combat].super, poketype2) then
    		multiplier = multiplier * 2
    	end
    	if effectiveness[combat].weak and isInArray(effectiveness[combat].weak, poketype1) then
    		multiplier = multiplier * 0.5
    	end
    	if poketype2 and effectiveness[combat].weak and isInArray(effectiveness[combat].weak, poketype2) then
    		multiplier = multiplier * 0.5
    	end
    	if effectiveness[combat].non and isInArray(effectiveness[combat].non, poketype1) then
    		multiplier = multiplier * 0
    	end
    	if poketype2 and effectiveness[combat].non and isInArray(effectiveness[combat].non, poketype2) then
    		multiplier = multiplier * 0
    	end
    
    	if multiplier == 0.25 then
    		multiplier = 0.5
    	elseif multiplier == 4 then
    		multiplier = 2
    	end
    
    return multiplier
    end
    
    function getCreatureDirectionToTarget(cid, target, ranged)
    	if not isCreature(cid) then return true end
    	if not isCreature(target) then return getCreatureLookDir(cid) end
    	local dirs = {
    	[NORTHEAST] = {NORTH, EAST},
    	[SOUTHEAST] = {SOUTH, EAST},
    	[NORTHWEST] = {NORTH, WEST},
    	[SOUTHWEST] = {SOUTH, WEST}}
    	local x = getDirectionTo(getThingPos(cid), getThingPos(target), false)
    		if x <= 3 then return x
    		else
    			local xdistance = math.abs(getThingPos(cid).x - getThingPos(target).x)
    			local ydistance = math.abs(getThingPos(cid).y - getThingPos(target).y)
    				if xdistance > ydistance then
    					return dirs[x][2]
    				elseif ydistance > xdistance then
    					return dirs[x][1]
    				elseif isInArray(dirs[x], getCreatureLookDir(cid)) then
    					return getCreatureLookDir(cid)
    				else
    					return dirs[x][math.random(1, 2)]
    				end
    		end
    end
    
    function getSomeoneDescription(cid)
    	if isPlayer(cid) then return getPlayerNameDescription(cid) end
    return getMonsterInfo(getCreatureName(cid)).description
    end
    	
    
    function isGhostPokemon(cid)
    	if not isCreature(cid) then return false end
    	local ghosts = {"Gastly", "Haunter", "Gengar", "Shiny Gengar", "Misdreavus", "Shiny Abra"}
    return isInArray(ghosts, getCreatureName(cid))
    end
    
    function updateGhostWalk(cid)
    	if not isCreature(cid) then return false end
    	local pos = getThingPos(cid)
    	pos.x = pos.x + 1
    	pos.y = pos.y + 1
    	local ret = getThingPos(cid)
    	doTeleportThing(cid, pos, false)
    	doTeleportThing(cid, ret, false)
    return true
    end
    
    function doRemoveElementFromTable(t, e)
    	local ret = {}
    	for a = 1, #t do
    		if t[a] ~= e then
    		table.insert(ret, t[a])
    		end
    	end
    return ret
    end
    
    function doFaceCreature(sid, pos)
    if not isCreature(sid) then return true end
    	if getThingPos(sid).x == pos.x and getThingPos(sid).y == pos.y then return true end
    	local ret = 0
    
    	local ld = getCreatureLookDir(sid)
    	local dir = getDirectionTo(getThingPos(sid), pos)
    	local al = {
    	[NORTHEAST] = {NORTH, EAST},
    	[NORTHWEST] = {NORTH, WEST},
    	[SOUTHEAST] = {SOUTH, EAST},
    	[SOUTHWEST] = {SOUTH, WEST}}
    
    	if dir >= 4 and isInArray(al[dir], ld) then return true end
    
    	doChangeSpeed(sid, 1)
    		if dir == 4 then
    			ret = math.random(2, 3)
    		elseif dir == 5 then
    			ret = math.random(1, 2)
    		elseif dir == 6 then
    			local dirs = {0, 3}
    			ret = dirs[math.random(1, 2)]
    		elseif dir == 7 then
    			ret = math.random(0, 1)
    		else
    			ret = getDirectionTo(getThingPos(sid), pos)
    		end
    doCreatureSetLookDir(sid, ret)
    doChangeSpeed(sid, -1)
    return true
    end
    
    function doCreatureAddCondition(cid, condition)
    if not isCreature(cid) then return true end
    doAddCondition(cid, condition)
    end
    
    function doCreatureRemoveCondition(cid, condition)
    if not isCreature(cid) then return true end
    doRemoveCondition(cid, condition)
    end
    
    function setCD(item, tipo, tempo)
    
    	if not tempo or not tonumber(tempo) then
    		doItemEraseAttribute(item, tipo)
    	return true
    	end
    
    	doItemSetAttribute(item, tipo, "cd:"..(tempo + os.time()).."")
    return tempo + os.time()
    end
    
    function getCD(item, tipo, limite)
    
    	if not getItemAttribute(item, tipo) then
    	return 0
    	end
    
    	local string = getItemAttribute(item, tipo):gsub("cd:", "")
    	local number = tonumber(string) - os.time()
    
    	if number <= 0 then
    	return 0
    	end
    
    	if limite and limite < number then
    		return 0
    	end
    
    return number
    end
    
    function doSendMoveEffect(cid, target, effect)
    if not isCreature(cid) or not isCreature(target) then return true end
    doSendDistanceShoot(getThingPos(cid), getThingPos(target), effect)
    return true
    end
    
    function doSetItemActionId(uid, actionid)
    doItemSetAttribute(uid, "aid", actionid)
    return true
    end
    
    function threeNumbers(number)
    	if number <= 9 then
    	return "00"..number..""
    	elseif number <= 99 then
    	return "0"..number..""
    	end
    return ""..number..""
    end
    
    function isBr(cid)
    if getPlayerStorageValue(cid, 105505) ~= -1 then
    return true
    end
    return false
    end
    
    function isBeingUsed(ball)            
    if not ball then return false end
    for a, b in pairs (pokeballs) do           --alterado v1.9
        if b.use == ball then return true end
    end
    return false
    end
    
    function doRemoveTile(pos)-- Script by mock
    pos.stackpos = 0
    local sqm = getTileThingByPos(pos)
    doRemoveItem(sqm.uid,1)
    end
    
    function doCreateTile(id,pos) -- By mock
    doAreaCombatHealth(0,0,pos,0,0,0,CONST_ME_NONE)
    doCreateItem(id,1,pos)
    end
    
    function hasSqm(pos)
    local f = getTileThingByPos(pos)
    if f.itemid ~= 0 and f.itemid ~= 1 then
    return true
    end
    return false
    end
    
    function getPosDirs(p, dir) -- By MatheusMkalo
    return dir == 1 and {x=p.x-1, y=p.y, z=p.z} or dir == 2 and {x=p.x-1, y=p.y+1, z=p.z} or dir == 3 and {x=p.x, y=p.y+1, z=p.z} or dir == 4 and {x=p.x+1, y=p.y+1, z=p.z} or dir == 5 and {x=p.x+1, y=p.y, z=p.z} or dir == 6 and {x=p.x+1, y=p.y-1, z=p.z} or dir == 7 and {x=p.x, y=p.y-1, z=p.z} or dir == 8 and {x=p.x-1, y=p.y-1, z=p.z}
    end
    
    function canWalkOnPos(pos, creature, pz, water, sqm, proj)
    if not pos then return false end
    if not pos.x then return false end
    if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid <= 1 and sqm then return false end
    if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 919 then return false end
    if isInArray({4820, 4821, 4822, 4823, 4824, 4825}, getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end
    if getTopCreature(pos).uid > 0 and creature then return false end
    if getTileInfo(pos).protection and pz then return false end
        local n = not proj and 3 or 2                                    --alterado v1.6
        for i = 0, 255 do
            pos.stackpos = i                           
            local tile = getTileThingByPos(pos)        
            if tile.itemid ~= 0 and i ~= 253 and not isCreature(tile.uid) then     --edited
                if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                    return false
                end
            end
        end   
    return true
    end
    
    function canWalkOnPos2(pos, creature, pz, water, sqm, proj)     --alterado v1.6
    if not pos then return false end
    if not pos.x then return false end
    if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid <= 1 and sqm then return false end
    if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 919 then return false end
    if isInArray({4820, 4821, 4822, 4823, 4824, 4825}, getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end
    if getTopCreature(pos).uid > 0 and creature then return false end
    if getTileInfo(pos).protection and pz then return false end
        --[[local n = not proj and 3 or 2
        for i = 0, 255 do
            pos.stackpos = i                           --edited pra retirar um bug.. ;x
            local tile = getTileThingByPos(pos)        
            if tile.itemid ~= 0 and i ~= 253 and not isCreature(tile.uid) then     --edited
                if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                    return false
                end
            end
        end ]]  
    return true
    end
    
    function getFreeTile(pos, cid)
    	if canWalkOnPos(pos, true, false, true, true, false) then
    		return pos
    	end
    	local positions = {}
    	for a = 0, 7 do
    		if canWalkOnPos(getPosByDir(pos, a), true, false, true, true, false) then
    		table.insert(positions, pos)
    		end
    	end
    	if #positions >= 1 then
    		if isCreature(cid) then
    			local range = 1000
    			local ret = getThingPos(cid)
    			for b = 1, #positions do
    				if getDistanceBetween(getThingPos(cid), positions[b]) < range then
    					ret = positions[b]
    					range = getDistanceBetween(getThingPos(cid), positions[b])
    				end
    			end
    			return ret
    		else
    			return positions[math.random(#positions)]
    		end
    	end
    return getThingPos(cid)
    end
    
    function isWalkable(pos, creature, proj, pz, water)-- by Nord
        if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then return false end
        if isWater(getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid) and water then return false end
        if getTopCreature(pos).uid > 0 and creature then return false end
        if getTileInfo(pos).protection and pz then return false, true end
        local n = not proj and 3 or 2
        for i = 0, 255 do
            pos.stackpos = i
            local tile = getTileThingByPos(pos)
            if tile.itemid ~= 0 and not isCreature(tile.uid) then
                if hasProperty(tile.uid, n) or hasProperty(tile.uid, 7) then
                    return false
                end
            end
        end
        return true
    end
    
    
    function isPlayerSummon(cid, uid)
    return getCreatureMaster(uid) == cid  --alterado 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[i])
              end
           else
              if itemid == item.itemid then
                 table.insert(items, item.uid)
              end
           end
       end
    end
    return items
    end
    
    function getPokeballsInContainer(container) -- Function By Kydrai
    	if not isContainer(container) then return {} end
    	local items = {}
    	if isContainer(container) and getContainerSize(container) > 0 then
    		for slot=0, (getContainerSize(container)-1) do
    			local item = getContainerItem(container, slot)
    				if isContainer(item.uid) then
    					local itemsbag = getPokeballsInContainer(item.uid)
    					for i=0, #itemsbag do
    						table.insert(items, itemsbag[i])
    					end
    				elseif isPokeball(item.itemid) then
    					table.insert(items, item.uid)
    				end
    		end
    	end
    return items
    end
    
    function getItensUniquesInContainer(container)    --alterado 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[i])
              end
           elseif getItemAttribute(item.uid, "unique") then
              table.insert(items, item)
           end
       end
    end
    return items
    end
    
    function hasSpaceInContainer(container)                --alterado v1.6
    if not isContainer(container) then return false end
    if getContainerSize(container) < getContainerCap(container) then return true end
    
    for slot = 0, (getContainerSize(container)-1) do
        local item = getContainerItem(container, slot)
        if isContainer(item.uid) then
           if hasSpaceInContainer(item.uid) then
              return true
           end
        end
    end
    return false
    end
    
    function doPlayerAddItemStacking(cid, itemid, quant) -- by mkalo
    local item = getItemsInContainerById(getPlayerSlotItem(cid, 3).uid, itemid)
    local piles = 0
    if #item > 0 then
       for i,x in pairs(item) do
           if getThing(x).type < 100 then
              local it = getThing(x)
              doTransformItem(it.uid, itemid, it.type+quant)
              if it.type+quant > 100 then
                 doPlayerAddItem(cid, itemid, it.type+quant-100)
              end
           else
              piles = piles+1
           end
       end
    else
       return doPlayerAddItem(cid, itemid, quant)
    end
    if piles == #item then
       doPlayerAddItem(cid, itemid, quant)
    end
    end
    
    function getPlayerInArea(fromPos, toPos) -- by jhon992
    local online = getPlayersOnline()
    local players = {}
    for i=1, #online do
        if isInArea(getPlayerPosition(online[i]), fromPos, toPos) then
            players[#players+1] = online[i]
        end
    end
    return players
    end
    function isPlayerOnline(uid)
    	return isInArray(getPlayersOnline(), uid)
    end
    
    function doRegenerateWithY(cid, sid)
    if isPlayerOnline(cid) then
    local ball = getPlayerSlotItem(cid, 8) or getPlayerSlotItem(getCreatureMaster(cid), 8)
    local Tiers = {
    [1] = {bonus = Regen1},
    [2] = {bonus = Regen2},
    [3] = {bonus = Regen3},
    [4] = {bonus = Regen4},
    [5] = {bonus = Regen5},
    [6] = {bonus = Regen6},
    [7] = {bonus = Regen7},
    }
    if isPlayer(cid) and #getCreatureSummons(cid) > 0 then
    local Tier = getItemAttribute(ball.uid, "heldy")
    if Tier and Tier > 0 and Tier < 8 then
    if not getCreatureCondition(cid, CONDITION_INFIGHT) then
    if getCreatureHealth(sid) < getCreatureMaxHealth(sid) then
    addEvent(function() doCreatureAddHealth(sid,Tiers[Tier].bonus) doSendAnimatedText(getThingPos(sid), "+ "..Tiers[Tier].bonus, 30) end, 0)
    end
    addEvent(doRegenerateWithY, 1000, cid, sid)  
    else
    addEvent(doRegenerateWithY, 1000, cid, sid)
    end
    end   
    end
    end 
    end
    
    function doCureWithY(cid, sid)
    if isPlayerOnline(cid) then
    local ball = getPlayerSlotItem(cid, 8) or getPlayerSlotItem(getCreatureMaster(cid), 8)
    local Tiers = {
    [8] = {chance = Cure1},
    [9] = {chance = Cure2},
    [10] = {chance = Cure3},
    [11] = {chance = Cure4},
    [12] = {chance = Cure5},
    [13] = {chance = Cure6},
    [14] = {chance = Cure7},
    }
    local Tier = getItemAttribute(ball.uid, "heldy")
    if isPlayer(cid) and #getCreatureSummons(cid) > 0  and Tier then
    if Tier > 7 and Tier < 15 then
    if math.random(1,100) <= Tiers[Tier].chance then
    doCureStatus(sid, "all")
    doSendMagicEffect(getThingPosWithDebug(sid), 14)
    end
    addEvent(doCureWithY, 1000, cid, sid)  
    end
    end
    end   
    end
    function doPlayerAddItemStacking(cid, itemid, quant)
    
    
    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
    break
    end
    else
    return doPlayerAddItem(cid, itemid, quant)
    end
    if piles == #item then
    doPlayerAddItem(cid, itemid, quant)
    end
    end
    
    function getDirectionToWalk(p1, pos2)
    	local dir = NORTH
    	local pos1 = getCreaturePosition(p1)
    	if(pos1.x > pos2.x) then
    		dir = WEST
    		if(pos1.y > pos2.y) then
    			dir = NORTHWEST
    		elseif(pos1.y < pos2.y) then
    			dir = SOUTHWEST
    		end
    	elseif(pos1.x < pos2.x) then
    		dir = EAST
    		if(pos1.y > pos2.y) then
    			dir = NORTHEAST
    		elseif(pos1.y < pos2.y) then
    			dir = SOUTHEAST
    		end
    	else
    		if(pos1.y > pos2.y) then
    			dir = NORTH
    		elseif(pos1.y < pos2.y) then
    			dir = SOUTH
    		end
    	end
    	return dir
    end
    
     function getNextStepDelay(cid, dir)
                return tonumber(398)
        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 hasTile(pos)    --Verifica se tem TILE na pos
    pos.stackpos = 0
    if getTileThingByPos(pos).itemid >= 1 then
       return true
    end
    return false
    end
    function doPlayerAddItemStacking(cid, itemid, quant)
    
    
    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
    break
    end
    else
    return doPlayerAddItem(cid, itemid, quant)
    end
    if piles == #item then
    doPlayerAddItem(cid, itemid, quant)
    end
    end
    
    function isFly(cid)
       if getPlayerStorageValue(cid, orderTalks["fly"].storage) == 1 then
          return true 
       end
       return false
    end
    
    
    function doOTCSendPokemonHealth(cid)
    	local ball = getPlayerSlotItem(cid, CONST_SLOT_FEET)
    	local pokemon = getCreatureSummons(cid)
    	if not ball.uid or ball.uid <= 1 then
    		return doSendPlayerExtendedOpcode(cid, 122, "0|0")
    	end
    	if #pokemon >= 1 then
    		return doSendPlayerExtendedOpcode(cid, 122, getCreatureHealth(pokemon[1]).."|"..getCreatureMaxHealth(pokemon[1]))
    	end
    end

    some functions.lua /\

  14. 1 hora atrás, Yan18 disse:

    Coloque a função no arquivo functions.lua ou some.functions.lua na pasta Data/Lib, onde preferir. Mas, coloque em algum arquivo de scripts de funções na pasta Lib, é melhor.

    Bom posso posta a script e tu add pra min e que tenho medo de add errado =/

     

    Se sim qual script se acha melhor ??

  15. 39 minutos atrás, Henrique disse:

    Falta a função: 

    
    selfAttackCreature

    Já foi postado esta função aqui no fórum, ou você pode usar a src que foi liberada em um servidor que tem 3 funções que fazem o sistema de NPC's duel funcionarem.

    @EDIT
    Inclusive postaram ela em um tópico seu:

    
    local function selfAttackCreature()
    if #getCreatureSummons(getNpcCid()) > 0 and not isCreature(getCreatureTarget(getCreatureSummons(getNpcCid())[1])) then
    	local list = getSpectators(getCreaturePosition(getNpcCid()), 7, 7, false)
    	for i=0, table.getn(list) do
    		local _target = list[i]
    		if(_target ~= 0) then
    			if isPlayer(_target) and not getTileInfo(getThingPos(_target)).protection then
    				if #getCreatureSummfighting = falseons(_target) > 0 then
    					doMonsterSetTarget(getCreatureSummons(getNpcCid())[1], getCreatureSummons(_target)[1])
    					setPlayerStorageValue(getCreatureSummons(getNpcCid())[1], 99856201, getNpcCid())
    				else
    				  fighting = false
    				end
    				target = _target
    				break
    			end
    		end
    	end
    end
    
    end

     

    puts irmao nem lembro mais esta script tem como errumo ou add esta funçao nela se esta script sua aii e a funçao onde posso ta colocando ela na script ?

  16. Estou com um BUG no NPC Hunter.

     

    BUG

    [14/07/2020 13:59:44] [Error - Npc interface] 
    [14/07/2020 13:59:44] data/npc/scripts/pvp/.aHunter.lua:onThink
    [14/07/2020 13:59:44] Description: 
    [14/07/2020 13:59:44] data/npc/scripts/pvp/.aHunter.lua:185: attempt to call global 'selfAttackCreature' (a nil value)
    [14/07/2020 13:59:44] stack traceback:
    [14/07/2020 13:59:44] 	data/npc/scripts/pvp/.aHunter.lua:185: in function <data/npc/scripts/pvp/.aHunter.lua:83>

    SCRIPT

    local target = 0
    local prevTarget = 0
    local origPos = 0
    local max_distance = 12
    local fighting = false
    local challenger = 0
    local battle_turn = 1		-- don't change
    local challenger_turn = 0	-- don't change
    ---
    --/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////--
    local function doSummonGymPokemon(npc)
    	local this = npc
    	if not isCreature(this) or not ehNPC(this) then return true end  --alterado v1.6
    	if #getCreatureSummons(this) >= 1 or target == 0 then return true end
    	local it = wildHunter[getPlayerStorageValue(this, 665471)][battle_turn]
    	if not it then return true end
    	doSummonMonster(this, it.name)              
    	local summon = getCreatureSummons(this)[1]
    	if not summon then                                              --alterado v1.6
           print("Error in npc: "..getCreatureName(this)..", tring to execute function 'doSummonGymPokemon', poke: "..it.name)
           battle_turn = battle_turn+1
           return true 
        end
    	local balleffect = pokeballs["normal"].effect
    		if it.ball and pokeballs[it.ball] then
    			balleffect = pokeballs[it.ball].effect
    		end
    	doSendMagicEffect(getThingPos(summon), balleffect)
    	setPlayerStorageValue(summon, 10000, balleffect)
    	setPlayerStorageValue(summon, 10001, gobackmsgs[math.random(#gobackmsgs)].back:gsub("doka", it.nick ~= "" and it.nick or it.name))
    	setPlayerStorageValue(summon, 1007, it.nick ~= "" and it.nick or it.name)
    	doSetMonsterGym(summon, target)
    	addEvent(adjustWildPoke, 15, summon, it.optionalLevel)
    	if it.nick ~= "" then doCreatureSetNick(summon, it.nick) end
    	local name = it.nick ~= "" and it.nick or getCreatureName(this).."s "..it.name    --alterado v1.3
    	doCreatureSay(this, gobackmsgs[math.random(#gobackmsgs)].go:gsub("doka", getPlayerStorageValue(summon, 1007)), 1)
    	fighting = true
    	battle_turn = battle_turn + 1
    end
    --/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////--
    local function goToOrigPos()
    target = 0
    selfFollow(0)
    fighting = false
    challenger = 0
    challenger_turn = 0
    if #getCreatureSummons(getNpcCid()) >= 1 then
       setPlayerStorageValue(getCreatureSummons(getNpcCid())[1], 1006, 0)
       doCreatureAddHealth(getCreatureSummons(getNpcCid())[1], -getCreatureMaxHealth(getCreatureSummons(getNpcCid())[1]))
    end
    doChangeSpeed(getNpcCid(), -getCreatureSpeed(getNpcCid()))
    doTeleportThing(getNpcCid(), origPos)
    end
    --/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////--
    local function updateTarget()
    if(target == 0) then
        local list = getSpectators(getNpcPos(), 9, 9, false)
        for i = 1, table.getn(list) do
            local _target = list[i]
            if(_target ~= 0) then
               if isPlayer(_target) and not getTileInfo(getThingPos(_target)).protection then --alterado v1.8
                  selfSay(hunterTalks[math.random(#hunterTalks)])
                  doNpcSetCreatureFocus(_target) 
                  target = _target
                  prevTarget = target
                  break
               end
            end
        end
    end
    end
    --/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////--
    function onCreatureAppear(cid)
    end
    
    function onCreatureDisappear(cid)
    end
    
    function onCreatureMove(creature, oldPos, newPos)
    --
    end
    --/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////--
    function onThink()
    if not isCreature(getNpcCid()) then return false end  --alterado v1.6
    if origPos == 0 then
       origPos = getNpcPos()
    end
    if getPlayerStorageValue(getNpcCid(), 665471) <= 0 then
       setPlayerStorageValue(getNpcCid(), 665471, math.random(1, 5))
       randOutfit(getNpcCid())
    end
    updateTarget()
    ------------------------------------------------------
    if getDistanceBetween(getNpcPos(), origPos) >= max_distance or (isCreature(target) and getTileInfo(getThingPos(target)).protection) or getTileInfo(getThingPos(getNpcCid())).protection then  
    goToOrigPos()                                                                                                                          --alterado v1.9
    end
    ------------------------------------------------------
    if(target == 0) then
    if getPlayerStorageValue(getNpcCid(), 154788) <= 0 then
       setPlayerStorageValue(getNpcCid(), 154788, 1)
       doChangeSpeed(getNpcCid(), -getCreatureSpeed(getNpcCid()))
       addEvent(randWalk, 2000, getNpcCid(), 1000, getPlayerStorageValue(getNpcCid(), 154788))
    end
    return true
    end 
    ------------------------------------------------------
    local playerPos = getThingPosWithDebug(target)   --alterado v1.6
    local myPos = getNpcPos()
    ------------------------------------------------------
    if(myPos.z ~= playerPos.z) then
    goToOrigPos()
    battle_turn = battle_turn == 1 and battle_turn or battle_turn-1
    return true
    end
    ------------------------------------------------------
    if getDistanceBetween(playerPos, myPos) > max_distance then
    goToOrigPos()
    battle_turn = battle_turn == 1 and battle_turn or battle_turn-1
    return true
    end
    ------------------------------------------------------
    if getDistanceBetween(playerPos, myPos) >= 5 then
    if getPlayerStorageValue(getNpcCid(), 154788) >= 1 then
       setPlayerStorageValue(getNpcCid(), 154788, -1)
       doRegainSpeed(getNpcCid()) 
       if isCreature(target) then
          selfFollow(target)
       end
    end
    end
    ------------------------------------------------------
    if getDistanceBetween(playerPos, myPos) <= 3 then
    if getPlayerStorageValue(getNpcCid(), 154788) <= 0 then
       setPlayerStorageValue(getNpcCid(), 154788, 1)
       doChangeSpeed(getNpcCid(), -getCreatureSpeed(getNpcCid()))
       addEvent(randWalk, 2000, getNpcCid(), 1000, getPlayerStorageValue(getNpcCid(), 154788))
    end
    end
    ------------------------------------------------------
    if getDistanceBetween(playerPos, myPos) <= 5 then
       challenger = target
       addEvent(doSummonGymPokemon, 1000, getNpcCid())
    
    local change = false
    
    if not isCreature(target) then
       target = 0
       battle_turn = battle_turn == 1 and battle_turn or battle_turn-1
       return true
    end
    
    if fighting then
    
       if not isCreature(getCreatureTarget(getNpcCid())) then
          if #getCreatureSummons(challenger) >= 1 then
             selfAttackCreature(getCreatureSummons(challenger)[1])
    		 change = true
    	  else
    	      if change then
    		     change = false
    	         challenger_turn = challenger_turn + 1
    		  end
          end
       end
    		
       if #getCreatureSummons(getNpcCid()) == 0 and isCreature(target) then
          if battle_turn > #wildHunter[getPlayerStorageValue(getNpcCid(), 665471)] then      
             addEvent(doCreateNpc, 300000, ".aHunter", myPos)  --alterado v1.5
             local outfit = getCreatureOutfit(getNpcCid())
             doRemoveCreature(getNpcCid())
             ----------------------------------------
             if outfit.lookType == 1016 then      --verifica se o npc eh female.. ;p
                 monster = doCreateMonster("aHunterFemale", myPos)
             else
                 monster = doCreateMonster("aHunter", myPos)
             end
             ----------------------------------------
             doCloneOut(monster, outfit)
             addEvent(beDrunk, 100, monster)
          end
    	     addEvent(doSummonGymPokemon, 1000, getNpcCid())
       end
    
       if #getCreatureSummons(challenger) <= 0 then
          selfAttackCreature(challenger) 
       end  
    end
    end
    end

    Quem puder ajudar  ^^

     

    Rep+++

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...