Ir para conteúdo
  • 0

[pedido] y-cure


Josegvb

Pergunta

ola, como voces sabem o y-cure em tudo PDA o held CURE faz a siguente funçao :

 

"auto medicine cada x segundos"

 

entao eu queria saber se alguem tiver como trocar essa funçao desse held pra ficar igual a PxG

como assim? bom no PxG é diferente... o cure é um CHANCE para que o pokemon enemigo nao consiga acertar o status negativo no pokemon

sendo que o tier 7 é 100% ai o pokemon fica impossivel de colocar miss (só contra pokemons selvagems)

enquanto pda é um auto medicine muito ruim pois qualquer q coloca isso no pokemon ja tem mt chance de ganhar os duels pois sempre esta acontecendo o auto medicine

 

function doCureWithY(cid, sid)    if not isPlayer(cid) or not isCreature(sid) then return true end        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") or 0    if #getCreatureSummons(cid) > 0 and Tiers[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

meu some functions.lua

Spoiler

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

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

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

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

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

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

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

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

function 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 rank2 = (getPlayerStorageValue(thing, 86228) <= 0) and "a Pokemon Trainer" or lookClans2[getPlayerStorageValue(thing, 86228)][getPlayerStorageValue(thing, 862281)]
local name = thing == cid and "yourself" or getCreatureName(thing)     --alterado v1.8
local art = thing == cid and "You are" or (getPlayerSex(thing) == 0 and "She is" or "He is")
   
local str = "You see "..name..". "..art.." "
if youAre[getPlayerGroupId(thing)] then
   str = str..""..(ocup).." and "..rank.." from ".. getTownName(getPlayerTown(thing)).."."       
else
if getPlayerSex(thing) == 1 then
str = str..""..(rank).." from ".. getTownName(getPlayerTown(thing)).."."
      elseif getPlayerSex(thing) == 0 then
str = str..""..(rank2).." from ".. getTownName(getPlayerTown(thing)).."."
      end   
end
if getPlayerGuildId(thing) > 0 then
   str = str.." "..art.." "..getPlayerGuildRank(thing).." from the "..getPlayerGuildName(thing).."."
end
if TV then
   str = str.." "..art.." watching TV."
end
str = str..""..((isPlayer(cid) and youAre[getPlayerGroupId(cid)]) and "\nPosition: [X: "..pos.x.."][Y: "..pos.y.."][Z: "..pos.z.."]" or "") --alterado v1.8

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

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

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

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

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

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

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

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

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

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

function getThingFromPosWithProtect(pos)  --Pega uma creatura numa posi軋o com prote輟es
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輟es
if hasTile(pos) then
pos.stackpos = 0
   pid = getTileThingByPos(pos)
else
   pid = getTileThingByPos({x=1,y=1,z=10,stackpos=0})
end
return pid
end

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

bpslot = CONST_SLOT_BACKPACK

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

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

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

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

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

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

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

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

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

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

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

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

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

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

function doCorrectPokemonName(poke)
return doCorrectString(poke)
end

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

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

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

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

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

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

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

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

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

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

    if hideeffects then
        doRemoveCreature(pokemon)
    return true
    end

    local pokename = getPokeName(pokemon)

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

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

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

    doSendMagicEffect(getCreaturePosition(pokemon), effect)

    doRemoveCreature(pokemon)

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

end

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

function doGoPokemon(cid, item)

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

   btype = getPokeballType(item.itemid)                   

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

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

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

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

    if not pokes[pokemon] then
    return true
    end

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

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

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

    doSummonMonster(cid, pokemon)

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

    if getCreatureName(pk) == "Ditto" then

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

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

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

    doCreatureSetLookDir(pk, 2)

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

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

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

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

    doSendMagicEffect(getCreaturePosition(pk), effect)

    


    unLock(item.uid) --alterado v1.8
    
    
    if useKpdoDlls then
        doUpdateMoves(cid)
    end
end

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

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

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

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

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

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

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

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

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

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

randomdiagonaldir = {
[NORTHEAST] = {NORTH, EAST},
[sOUTHEAST] = {SOUTH, EAST},
[NORTHWEST] = {NORTH, WEST},
[sOUTHWEST] = {SOUTH, WEST}}

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

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

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

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

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

return multiplier
end

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

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

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

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

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

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

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

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

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

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

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

function setCD(item, tipo, tempo)

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

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

function getCD(item, tipo, limite)

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

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

    if number <= 0 then
    return 0
    end

    if limite and limite < number then
        return 0
    end

return number
end

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

function doRegenerateWithY(cid, sid)
    if not isPlayer(cid) or not isCreature(sid) then return true end
    
    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 #getCreatureSummons(cid) > 0 then
        local Tier = getItemAttribute(ball.uid, "heldy") or 0
        if Tier > 0 and Tier < 8 and Tiers[Tier] 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

function doCureWithY(cid, sid)
    if not isPlayer(cid) or not isCreature(sid) then return true end
    
    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") or 0
if getPlayerStorageValue(cid, 52480) == 1 or getPlayerStorageValue(cid, 52481) == 1 or getPlayerStorageValue(cid, 52482) == 1 or getPlayerStorageValue(cid, 52483) == 1 or getPlayerStorageValue(cid, 52484) == 1 then
        print (1)
    else
        if #getCreatureSummons(cid) > 0 and Tiers[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)
 ---               return true
                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 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 getSmeargleMoveTable(master)
  local ball = getPlayerSlotItem(master, 8).uid
  local moves = {}
  local skts = {"skt1", "skt2", "skt3", "skt4", "skt5", "skt6", "skt7", "skt8"}
  for x=1, #skts do
    moves["move"..x] = getItemAttribute(ball, skts[x]) and movestable[getItemAttribute(ball, skts[x])]["move"..x] and movestable[getItemAttribute(ball, skts[x])]["move"..x] ~= -1 and movestable[getItemAttribute(ball, skts[x])]["move"..x] or movestable["Smeargle"]["move"..x]
  end
  return moves
  end

function smeargleHaveSpell(cid, spellname)
local has = false
local moves = getSmeargleMoveTable(cid)
 local ball = getPlayerSlotItem(cid, 8).uid
local skts = {"skt1", "skt2", "skt3", "skt4", "skt5", "skt6", "skt7", "skt8"}
for x=1, #skts do
if getItemAttribute(ball, skts[x]) and moves["move"..x].name == spellname then
has = true
break
end
end
return has
end    


function isDitto(cid)
if (getCreatureName(mysum) == "Ditto") or (getCreatureName(mysum) == "Shiny Ditto") then
if getItemAttribute(thisball.uid, "ehditto") ~= -1 or getItemAttribute(thisball.uid, "ehshinyditto") ~= -1 then
return true
end
end
return true
end
    

 

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

Posts Recomendados

  • 0
Agora, Bodak Reborn disse:

Tire o "return true". Ele vai ficar soltando o cure toda hora, como normalmente.

Se quiser que o cure funcione como você pediu no tópico, espere alguém postar o script, pois eu não faço ideia de como fazer. ;\

 

pronto! valeu mano, isso ira servir por agora pois estaba cansado q no duel só importaba se voce tinha o poke com y-cure ou n...

enfim! topico NAO resolvido ficarei esperando pra ver se alguem consegue ajudar modificando o script do jeito q eu quero ^^

Link para o comentário
Compartilhar em outros sites

  • 0
34 minutos atrás, Bodak Reborn disse:

@Josegvb, o seu cure também está removendo efeitos positivos ou é apenas esse problema com a forma em que ele funciona?

 

ele tambem remove o efeito de inmunidades, acho q qualquer tipo de efeito

 

Link para o comentário
Compartilhar em outros sites

  • 0

Desculpe a demora, semana cheia. Em newStatusSyst.lua, troque:

if isSummon(ret.id) and getPokemonBoost(ret.id) ~= 0 and math.random(1, 100) <= getPokemonBoost(ret.id) then   --sistema "pegou no boost"    if ret.cond and not isInArray({"Poison", "Leech", "Fear"}, ret.cond) then         doSendAnimatedText(getThingPosWithDebug(ret.id), "BOOST", 215)   --alterado v1.8           return true    endend

por:

if isSummon(ret.id) then    if getPokemonBoost(ret.id) ~= 0 and math.random(1, 100) <= getPokemonBoost(ret.id) then   --sistema "pegou no boost"        if ret.cond and not isInArray({"Poison", "Leech", "Fear"}, ret.cond) then             doSendAnimatedText(getThingPosWithDebug(ret.id), "BOOST", 215)   --alterado v1.8               return true        end    end        local Tiers, master = {        [8] = {chance = Cure1},        [9] = {chance = Cure2},        [10] = {chance = Cure3},        [11] = {chance = Cure4},        [12] = {chance = Cure5},        [13] = {chance = Cure6},        [14] = {chance = Cure7}    }, getCreatureMaster(ret.id)        if getPlayerStorageValue(master, 52480) < 1 then        local held_item = getItemAttribute(getPlayerSlotItem(master, 8).uid, "heldy")                if held_item and Tiers[held_item] then            if math.random(1, 100) <= Tiers[held_item].chance then                doSendMagicEffect(getThingPos(ret.id), 14)                return true            end        end    endend

Optei por incluir ambas as proteções de efeitos negativos em um mesmo escopo, porém a lógica que expliquei na primeira página se mantém.

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

  • 0

@zipter98  nem é cmg isso n ne? : / trokei aki mas n mudou em nada, ele ainda fica batendo essa "automedicine" td hora ou teria q trocar o meu some functions pro o jeito q ele falou?

 

copiei o script q ele fez + o seu e deu em isso

04cec899aef962558478faecbdda74a8.png

 

;/: sem o dele só ficaba normal o cure, uma automedicine

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

  • 0
39 minutos atrás, zipter98 disse:

Você deve remover a modificação em some functions.lua, deixando apenas a feita em newStatusSyst.lua.

removi, meu some functions esta assim

function doCureWithY(cid, sid)    if not isPlayer(cid) or not isCreature(sid) then return true end        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") or 0if getPlayerStorageValue(cid, 52480) == 1 or getPlayerStorageValue(cid, 52481) == 1 or getPlayerStorageValue(cid, 52482) == 1 or getPlayerStorageValue(cid, 52483) == 1 or getPlayerStorageValue(cid, 52484) == 1 then        print (1)    else        if #getCreatureSummons(cid) > 0 and Tiers[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) ---               return true                end                addEvent(doCureWithY, 1000, cid, sid)              end        end     endend 

e o meu newstatus ficou assim

 

if isSummon(ret.id) then    if getPokemonBoost(ret.id) ~= 0 and math.random(1, 100) <= getPokemonBoost(ret.id) then   --sistema "pegou no boost"        if ret.cond and not isInArray({"Poison", "Leech", "Fear"}, ret.cond) then             doSendAnimatedText(getThingPosWithDebug(ret.id), "BOOST", 215)   --alterado v1.8               return true        end    end        local Tiers, master = {        [8] = {chance = Cure1},        [9] = {chance = Cure2},        [10] = {chance = Cure3},        [11] = {chance = Cure4},        [12] = {chance = Cure5},        [13] = {chance = Cure6},        [14] = {chance = Cure7}    }, getCreatureMaster(ret.id)        if getPlayerStorageValue(master, 52480) < 1 then        local held_item = getItemAttribute(getPlayerSlotItem(master, 8).uid, "heldy")                if held_item and Tiers[held_item] then            if math.random(1, 100) <= Tiers[held_item] then                doSendMagicEffect(getThingPos(ret.id), 14)                return true            end        end    endend

 

porem ainda ficou como uma auto medicine

8fa96aa1899a76a96106d5414163b2eb.gif

 

quando sua funçao deberia ser assim

 

 

toda vez q ele for acerta por 1 skillshot (de poke selvagems somente) iria falar MED alias é o cure q tirou o status negativo no mesmo segundo q foi acertado mas é o tier 7 apenas q é 100% os outros iria ter uma chance menor de o cure funfar, alias eles poderiam pegar status negativo sim

Link para o comentário
Compartilhar em outros sites

  • 0

Eu testei a minha modificação em um PDA e funcionou perfeitamente, exatamente como no vídeo. Provavelmente a modificação anterior do Y-Cure ainda se mantém, talvez você não tenha atualizado os arquivos ou alguma coisa passou despercebida. Se possível, remova tudo que tiver doCureWithY no seu servidor (utilize a ferramenta "Localizar em arquivos", do Notepad++).

Quanto ao texto animado "MED", basta chamar a seguinte função:

doSendAnimatedText(getThingPos(ret.id), "MED", 215)

 

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

  • 0
5 horas atrás, zipter98 disse:

Eu testei a minha modificação em um PDA e funcionou perfeitamente, exatamente como no vídeo. Provavelmente a modificação anterior do Y-Cure ainda se mantém, talvez você não tenha atualizado os arquivos ou alguma coisa passou despercebida. Se possível, remova tudo que tiver doCureWithY no seu servidor (utilize a ferramenta "Localizar em arquivos", do Notepad++).

Quanto ao texto animado "MED", basta chamar a seguinte função:

doSendAnimatedText(getThingPos(ret.id), "MED", 215)

 

 

opa malz tive q sair pra a facultade, entao é deletar o Y-CURE do some functions é?

eu deletei la, e deixei esse só no newstatus porem ta dando 1 erro aki

[04/05/2016 18:42:50] [Error - Spell Interface] 

[04/05/2016 18:42:50] In a timer event called from: 

[04/05/2016 18:42:50] data/spells/scripts/ps/Lick.lua:onCastSpell

[04/05/2016 18:42:50] Description: 

[04/05/2016 18:42:50] data/lib/newStatusSyst.lua:741: attempt to compare number with table

[04/05/2016 18:42:50] stack traceback:

[04/05/2016 18:42:50]     data/lib/newStatusSyst.lua:741: in function 'doCondition2'

[04/05/2016 18:42:50]     data/lib/newStatusSyst.lua:1011: in function <data/lib/newStatusSyst.lua:960>

 

meu newstatuslib:

Spoiler

conds = {

["Slow"] = 3890,

["Confusion"] = 3891,  

["Burn"] = 3892,

["Poison"] = 3893,

["Fear"] = 3894,

["Stun"] = 3895,

["Paralyze"] = 3896,                               --alterado v1.6 \/ peguem o script todo!

["Leech"] = 3897,

["Buff1"] = 3898,

["Buff2"] = 3899,

["Buff3"] = 3900,

["Miss"] = 32659,   

["Silence"] = 32698,     

["Sleep"] = 98271,

}

injuries2 = {

[1] = {n = "slow", m = 3890},

[2] = {n = "confuse", m = 3891},  

[3] = {n = "burn", m = 3892},

[4] = {n = "poison", m = 3893},

[5] = {n = "fear", m = 3894},

[6] = {n = "stun", m = 3895},

[7] = {n = "paralyze", m = 3896},

[8] = {n = "leech", m = 3897},

[9] = {n = "Buff1", m = 3898},

[10] = {n = "Buff2", m = 3899},

[11] = {n = "Buff3", m = 3900},

[12] = {n = "miss", m = 32659},   

[13] = {n = "silence", m = 32698},     

[14] = {n = "sleep", m = 98271},

}

Buffs = {

[1] = {"Buff1", 3898},

[2] = {"Buff2", 3899},

[3] = {"Buff3", 3900},

}

paralizeArea2 = createConditionObject(CONDITION_PARALYZE)

setConditionParam(paralizeArea2, CONDITION_PARAM_TICKS, 50000)

setConditionFormula(paralizeArea2, -0.63, -0.63, -0.63, -0.63)

local roardirections = {

[NORTH] = {SOUTH},

[sOUTH] = {NORTH},

[WEST] = {EAST},           --edited sistema de roar

[EAST] = {WEST}}

function doSendSleepEffect(cid)

    if not isCreature(cid) or not isSleeping(cid) then return true end

    doSendMagicEffect(getThingPos(cid), 32)

    addEvent(doSendSleepEffect, 1500, cid)

end

local outFurys = {

["Charizard"] = {outFury = 2594}, 

["Shiny Charizard"] = {outFury = 2595}, 

["Elder Charizard"] = {outFury = 2595},  

["Shiny Blastoise"] = {outFury = 1074},   

["Ancient Blastoise"] = {outFury = 1074}, 

["Ditto"] = {outFury = null},   

}

local outImune = {

["Camouflage"] = 1445,

["Acid Armor"] = 1453,

["Iron Defense"] = 1401,

["Iron Defense2"] = 22,

["Crystal Defense"] = 2161,

["Minimize"] = 1455,

["Future Sight"] = 1446,

["Psychic Sight"] = 1536,

["Heal Bell"] = 946,

}

            

local function transBack(cid)

if isCreature(cid) then

   if getPlayerStorageValue(cid, 974848) >= 1 then

      setPlayerStorageValue(cid, 974848, 0)

      doRemoveCondition(cid, CONDITION_OUTFIT)

   end

end

end

function doCondition2(ret)

--

function doMiss2(cid, cd, eff, check, spell)

local stg = conds["Miss"]

    if not isCreature(cid) then return true end  --is creature?

  local pokemons = { "Ho-oh", "Lugia", "Mew", "Mewtwo", "Suicune", "Raikou", "Entei", "Moltres", "Zapdos", "Articuno", "Celebi", "Blue Tower 1", "Blue Tower 2", "Blue Tower 3", "Red Tower 1", "Red Tower 2", "Red Tower 3","npc dark mega alakazam", "npc dark mega swamper", "npc shiny fearow", "npc kingdra", "npc shiny pidgeot", "npc shiny dragonair", "npc dragonite", "npc gyarados", "npc mantine", "npc pidgeot", "npc shiny dodrio", "npc mega charizard y", "npc Mega Gardevoir", "npc Mega Gengar", "npc mega gyarados", "npc mega kabutops", "npc mega lucario", "npc mega manectric", "npc mega mawile", "npc mega sableye", "Npc mega sceptile", "npc mega swampert", "npc mega tangrowth", "npc mega tyranitar", "npc mega venusaur", "npc shiny Farfetch'd", "npc aerodactyl", "npc xatu", "npc slowking", "npc jynx", "npc shiny jynx", "npc exeguttor", "npc shiny abra", "npc shiny hypno", "npc Mr. Mime", "npc Shiny Mr. Mime", "npc alakazam", "Npc shiny alakazam", "npc espeon", "npc shiny espeon", "npc girafarig", "npc mega alakazam", "npc psychic", "npc steelix", "npc shiny golem", "npc shiny marowak", "npc shiny onix", "npc shiny rhydon", "npc rhydon", "npc sandslash", "npc shiny pupitar", "npc kabutops", "npc omastar", "npc shiny scyther", "npc scyther", "npc shiny vileplume", "npc shiny venusaur", "npc venusaur", "npc shiny ariados", "npc heracross", "npc shiny pinsir", "npc meganium", "npc shiny meganium", "npc shiny tangela", "super kangaskhan", "npc shiny stantler", "npc strong machamp", "npc strong hitmontop", "npc strong hitmonlee", "npc strong hitmonchan", "npc strong hitmontop", "npc strong porygon2", "npc strong blissey", "npc strong miltank", "npc strong tauros", "npc strong snorlax", "npc strong ursaring", "npc strong jolteon", "npc strong raichu", "npc shiny raichu", "npc strong electabuzz", "npc ampharos", "npc shiny electabuzz", "npc shiny ampharos", "npc shiny magneton", "npc lanturn", "npc shiny lanturn", "npc Electivire", "npc Shiny Electivire", "npc Shiny Electrode", "npc Donphan",  "npc golem", "npc shiny ninetales", "npc ninetales", "npc Magmar", "npc shiny magmar", "npc shiny flareon", "npc magmortar", "npc shiny magmortar", "houndoom", "npc Arcanine", "npc Shiny Arcanine", "npc Charizard", "npc Shiny Charizard", "npc Magcargo", "npc shiny Magcargo", "npc Typhlosion", "npc Shiny Typhlosion", "npc mega charizard x"}

if isInArray(pokemons, getCreatureName(cid)) and not isSummon(cid) then return true end    

    if getPlayerStorageValue(cid, 21100) >= 1 and getPlayerStorageValue(cid, stg) <= -1 then return true end --alterado v1.6  reflect

    if not canDoMiss(cid, spell) then return true end

    if getPlayerStorageValue(cid, stg) >= 1 and cd ~= -1 then 

    setPlayerStorageValue(cid, stg, cd)    --allterado v1.8

       return true 

    end 

    if not check and getPlayerStorageValue(cid, stg) >= 1 then

       setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd - 1)

    else

       setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd)

    end

           

    local a = getPlayerStorageValue(cid, stg)

           

    if isSummon(cid) and getPlayerStorageValue(cid, 212123) <= 0 then

       local item = getPlayerSlotItem(getCreatureMaster(cid), 8):

       doItemSetAttribute(item.uid, "miss", a)

       doItemSetAttribute(item.uid, "missEff", eff)

       doItemSetAttribute(item.uid, "missSpell", spell)

    end

    

    if a <= -1 then 

    setPlayerStorageValue(cid, stg, -1)

    return true 

    end

        

    doSendMagicEffect(getThingPos(cid), eff)

    addEvent(doMiss2, 1000, cid, -1, eff, a, spell)   

end 

function doSilence2(cid, cd, eff, check)

local stg = conds["Silence"]

    if not isCreature(cid) then return true end  --is creature?

  local pokemons = { "Ho-oh", "Lugia", "Mew", "Mewtwo", "Suicune", "Raikou", "Entei", "Moltres", "Zapdos", "Articuno", "Celebi", "Blue Tower 1", "Blue Tower 2", "Blue Tower 3", "Red Tower 1", "Red Tower 2", "Red Tower 3","npc dark mega alakazam", "npc dark mega swamper", "npc shiny fearow", "npc kingdra", "npc shiny pidgeot", "npc shiny dragonair", "npc dragonite", "npc gyarados", "npc mantine", "npc pidgeot", "npc shiny dodrio", "npc mega charizard y", "npc Mega Gardevoir", "npc Mega Gengar", "npc mega gyarados", "npc mega kabutops", "npc mega lucario", "npc mega manectric", "npc mega mawile", "npc mega sableye", "Npc mega sceptile", "npc mega swampert", "npc mega tangrowth", "npc mega tyranitar", "npc mega venusaur", "npc shiny Farfetch'd", "npc aerodactyl", "npc xatu", "npc slowking", "npc jynx", "npc shiny jynx", "npc exeguttor", "npc shiny abra", "npc shiny hypno", "npc Mr. Mime", "npc Shiny Mr. Mime", "npc alakazam", "Npc shiny alakazam", "npc espeon", "npc shiny espeon", "npc girafarig", "npc mega alakazam", "npc psychic", "npc steelix", "npc shiny golem", "npc shiny marowak", "npc shiny onix", "npc shiny rhydon", "npc rhydon", "npc sandslash", "npc shiny pupitar", "npc kabutops", "npc omastar", "npc shiny scyther", "npc scyther", "npc shiny vileplume", "npc shiny venusaur", "npc venusaur", "npc shiny ariados", "npc heracross", "npc shiny pinsir", "npc meganium", "npc shiny meganium", "npc shiny tangela", "super kangaskhan", "npc shiny stantler", "npc strong machamp", "npc strong hitmontop", "npc strong hitmonlee", "npc strong hitmonchan", "npc strong hitmontop", "npc strong porygon2", "npc strong blissey", "npc strong miltank", "npc strong tauros", "npc strong snorlax", "npc strong ursaring", "npc strong jolteon", "npc strong raichu", "npc shiny raichu", "npc strong electabuzz", "npc ampharos", "npc shiny electabuzz", "npc shiny ampharos", "npc shiny magneton", "npc lanturn", "npc shiny lanturn", "npc Electivire", "npc Shiny Electivire", "npc Shiny Electrode", "npc Donphan",  "npc golem", "npc shiny ninetales", "npc ninetales", "npc Magmar", "npc shiny magmar", "npc shiny flareon", "npc magmortar", "npc shiny magmortar", "houndoom", "npc Arcanine", "npc Shiny Arcanine", "npc Charizard", "npc Shiny Charizard", "npc Magcargo", "npc shiny Magcargo", "npc Typhlosion", "npc Shiny Typhlosion", "npc mega charizard x"}

if isInArray(pokemons, getCreatureName(cid)) and not isSummon(cid) then return true end    

    if getPlayerStorageValue(cid, stg) >= 1 and cd ~= -1 then 

       setPlayerStorageValue(cid, stg, cd)    --allterado v1.8

       return true 

    end

    if not check and getPlayerStorageValue(cid, stg) >= 1 then

       setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd - 1)

    else

       setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd)

    end

           

    local a = getPlayerStorageValue(cid, stg)

           

    if isSummon(cid) and getPlayerStorageValue(cid, 212123) <= 0 then

       local item = getPlayerSlotItem(getCreatureMaster(cid), 8):

       doItemSetAttribute(item.uid, "silence", a)

       doItemSetAttribute(item.uid, "silenceEff", eff)

    end

    

    if a <= -1 then 

    setPlayerStorageValue(cid, stg, -1)

    return true 

    end

        

    doSendMagicEffect(getThingPos(cid), eff)

    addEvent(doSilence2, 1000, cid, -1, eff, a)   

end       

function doSlow2(cid, cd, eff, check, first)

local stg = conds["Slow"]

    if not isCreature(cid) then return true end  --is creature?

  local pokemons = { "Ho-oh", "Lugia", "Mew", "Mewtwo", "Suicune", "Raikou", "Entei", "Moltres", "Zapdos", "Articuno", "Celebi", "Blue Tower 1", "Blue Tower 2", "Blue Tower 3", "Red Tower 1", "Red Tower 2", "Red Tower 3","npc dark mega alakazam", "npc dark mega swamper", "npc shiny fearow", "npc kingdra", "npc shiny pidgeot", "npc shiny dragonair", "npc dragonite", "npc gyarados", "npc mantine", "npc pidgeot", "npc shiny dodrio", "npc mega charizard y", "npc Mega Gardevoir", "npc Mega Gengar", "npc mega gyarados", "npc mega kabutops", "npc mega lucario", "npc mega manectric", "npc mega mawile", "npc mega sableye", "Npc mega sceptile", "npc mega swampert", "npc mega tangrowth", "npc mega tyranitar", "npc mega venusaur", "npc shiny Farfetch'd", "npc aerodactyl", "npc xatu", "npc slowking", "npc jynx", "npc shiny jynx", "npc exeguttor", "npc shiny abra", "npc shiny hypno", "npc Mr. Mime", "npc Shiny Mr. Mime", "npc alakazam", "Npc shiny alakazam", "npc espeon", "npc shiny espeon", "npc girafarig", "npc mega alakazam", "npc psychic", "npc steelix", "npc shiny golem", "npc shiny marowak", "npc shiny onix", "npc shiny rhydon", "npc rhydon", "npc sandslash", "npc shiny pupitar", "npc kabutops", "npc omastar", "npc shiny scyther", "npc scyther", "npc shiny vileplume", "npc shiny venusaur", "npc venusaur", "npc shiny ariados", "npc heracross", "npc shiny pinsir", "npc meganium", "npc shiny meganium", "npc shiny tangela", "super kangaskhan", "npc shiny stantler", "npc strong machamp", "npc strong hitmontop", "npc strong hitmonlee", "npc strong hitmonchan", "npc strong hitmontop", "npc strong porygon2", "npc strong blissey", "npc strong miltank", "npc strong tauros", "npc strong snorlax", "npc strong ursaring", "npc strong jolteon", "npc strong raichu", "npc shiny raichu", "npc strong electabuzz", "npc ampharos", "npc shiny electabuzz", "npc shiny ampharos", "npc shiny magneton", "npc lanturn", "npc shiny lanturn", "npc Electivire", "npc Shiny Electivire", "npc Shiny Electrode", "npc Donphan",  "npc golem", "npc shiny ninetales", "npc ninetales", "npc Magmar", "npc shiny magmar", "npc shiny flareon", "npc magmortar", "npc shiny magmortar", "houndoom", "npc Arcanine", "npc Shiny Arcanine", "npc Charizard", "npc Shiny Charizard", "npc Magcargo", "npc shiny Magcargo", "npc Typhlosion", "npc Shiny Typhlosion", "npc mega charizard x"}

if isInArray(pokemons, getCreatureName(cid)) and not isSummon(cid) then return true end

     if getPlayerStorageValue(cid, stg) >= 1 and cd ~= -1 then 

       setPlayerStorageValue(cid, stg, cd)    --allterado v1.8

       return true 

    end

    if not check and getPlayerStorageValue(cid, stg) >= 1 then

       setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd - 1)

    else

       setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd)

    end

           

    local a = getPlayerStorageValue(cid, stg)

           

    if isSummon(cid) and getPlayerStorageValue(cid, 212123) <= 0 then

       local item = getPlayerSlotItem(getCreatureMaster(cid), 8):

       doItemSetAttribute(item.uid, "slow", a)

       doItemSetAttribute(item.uid, "slowEff", eff)

    end

    

    if a <= -1 then 

    doRemoveCondition(cid, CONDITION_PARALYZE)

    if not isSleeping(cid) and not isParalyze(cid) then

       addEvent(doRegainSpeed, 50, cid)     --alterado

    end

    setPlayerStorageValue(cid, stg, -1)

    return true 

    end

    

    if first then

       doAddCondition(cid, paralizeArea2) 

    end  

      

    doSendMagicEffect(getThingPos(cid), eff)

    addEvent(doSlow2, 1000, cid, -1, eff, a)   

end    

function doConfusion2(cid, cd, check)

local stg = conds["Confusion"]

    if not isCreature(cid) then return true end  --is creature?

  local pokemons = { "Ho-oh", "Lugia", "Mew", "Mewtwo", "Suicune", "Raikou", "Entei", "Moltres", "Zapdos", "Articuno", "Celebi", "Blue Tower 1", "Blue Tower 2", "Blue Tower 3", "Red Tower 1", "Red Tower 2", "Red Tower 3","npc dark mega alakazam", "npc dark mega swamper", "npc shiny fearow", "npc kingdra", "npc shiny pidgeot", "npc shiny dragonair", "npc dragonite", "npc gyarados", "npc mantine", "npc pidgeot", "npc shiny dodrio", "npc mega charizard y", "npc Mega Gardevoir", "npc Mega Gengar", "npc mega gyarados", "npc mega kabutops", "npc mega lucario", "npc mega manectric", "npc mega mawile", "npc mega sableye", "Npc mega sceptile", "npc mega swampert", "npc mega tangrowth", "npc mega tyranitar", "npc mega venusaur", "npc shiny Farfetch'd", "npc aerodactyl", "npc xatu", "npc slowking", "npc jynx", "npc shiny jynx", "npc exeguttor", "npc shiny abra", "npc shiny hypno", "npc Mr. Mime", "npc Shiny Mr. Mime", "npc alakazam", "Npc shiny alakazam", "npc espeon", "npc shiny espeon", "npc girafarig", "npc mega alakazam", "npc psychic", "npc steelix", "npc shiny golem", "npc shiny marowak", "npc shiny onix", "npc shiny rhydon", "npc rhydon", "npc sandslash", "npc shiny pupitar", "npc kabutops", "npc omastar", "npc shiny scyther", "npc scyther", "npc shiny vileplume", "npc shiny venusaur", "npc venusaur", "npc shiny ariados", "npc heracross", "npc shiny pinsir", "npc meganium", "npc shiny meganium", "npc shiny tangela", "super kangaskhan", "npc shiny stantler", "npc strong machamp", "npc strong hitmontop", "npc strong hitmonlee", "npc strong hitmonchan", "npc strong hitmontop", "npc strong porygon2", "npc strong blissey", "npc strong miltank", "npc strong tauros", "npc strong snorlax", "npc strong ursaring", "npc strong jolteon", "npc strong raichu", "npc shiny raichu", "npc strong electabuzz", "npc ampharos", "npc shiny electabuzz", "npc shiny ampharos", "npc shiny magneton", "npc lanturn", "npc shiny lanturn", "npc Electivire", "npc Shiny Electivire", "npc Shiny Electrode", "npc Donphan",  "npc golem", "npc shiny ninetales", "npc ninetales", "npc Magmar", "npc shiny magmar", "npc shiny flareon", "npc magmortar", "npc shiny magmortar", "houndoom", "npc Arcanine", "npc Shiny Arcanine", "npc Charizard", "npc Shiny Charizard", "npc Magcargo", "npc shiny Magcargo", "npc Typhlosion", "npc Shiny Typhlosion", "npc mega charizard x"}

if isInArray(pokemons, getCreatureName(cid)) and not isSummon(cid) then return true end    

    if getPlayerStorageValue(cid, stg) >= 1 and cd ~= -1 then 

       setPlayerStorageValue(cid, stg, cd)    --allterado v1.8

       return true 

    end

    if not check and getPlayerStorageValue(cid, stg) >= 1 then

       setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd - 1)

    else

       setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd)

    end

           

    local a = getPlayerStorageValue(cid, stg)

           

    if isSummon(cid) and getPlayerStorageValue(cid, 212123) <= 0 then

       local item = getPlayerSlotItem(getCreatureMaster(cid), 8):

       doItemSetAttribute(item.uid, "confuse", a)

    end

    

    if a <= -1 then 

    if getCreatureCondition(cid, CONDITION_PARALYZE) == true then

       doRemoveCondition(cid, CONDITION_PARALYZE)

       addEvent(doAddCondition, 10, cid, paralizeArea2)            

    end

    if not isSleeping(cid) and not isParalyze(cid) then

       doRegainSpeed(cid)            --alterado 

    end

    setPlayerStorageValue(cid, stg, -1)

    return true 

    end

    

    if math.random(1, 6) >= 4 then

        doSendMagicEffect(getThingPos(cid), 31)

    end

    local isTarget = isSummon(cid) and getCreatureTarget(getCreatureMaster(cid)) or getCreatureTarget(cid)

    if isCreature(isTarget) and not isSleeping(cid) and not isParalyze(cid) and getPlayerStorageValue(cid, 654878) <= 0 then --alterado v1.6

        doChangeSpeed(cid, -getCreatureSpeed(cid))

        doChangeSpeed(cid, 100)

        doPushCreature(cid, math.random(0, 3), 1, 0)    --alterado v1.6

        doChangeSpeed(cid, -100)

    end

    local pos = getThingPos(cid)

    addEvent(doSendMagicEffect, math.random(0, 450), pos, 31)

 

    addEvent(doConfusion2, 1000, cid, -1, a)   

end           

function doBurn2(cid, cd, check, damage)

local stg = conds["Burn"]

    if not isCreature(cid) then return true end  --is creature?

  local pokemons = { "Ho-oh", "Lugia", "Mew", "Mewtwo", "Suicune", "Raikou", "Entei", "Moltres", "Zapdos", "Articuno", "Celebi", "Blue Tower 1", "Blue Tower 2", "Blue Tower 3", "Red Tower 1", "Red Tower 2", "Red Tower 3","npc dark mega alakazam", "npc dark mega swamper", "npc shiny fearow", "npc kingdra", "npc shiny pidgeot", "npc shiny dragonair", "npc dragonite", "npc gyarados", "npc mantine", "npc pidgeot", "npc shiny dodrio", "npc mega charizard y", "npc Mega Gardevoir", "npc Mega Gengar", "npc mega gyarados", "npc mega kabutops", "npc mega lucario", "npc mega manectric", "npc mega mawile", "npc mega sableye", "Npc mega sceptile", "npc mega swampert", "npc mega tangrowth", "npc mega tyranitar", "npc mega venusaur", "npc shiny Farfetch'd", "npc aerodactyl", "npc xatu", "npc slowking", "npc jynx", "npc shiny jynx", "npc exeguttor", "npc shiny abra", "npc shiny hypno", "npc Mr. Mime", "npc Shiny Mr. Mime", "npc alakazam", "Npc shiny alakazam", "npc espeon", "npc shiny espeon", "npc girafarig", "npc mega alakazam", "npc psychic", "npc steelix", "npc shiny golem", "npc shiny marowak", "npc shiny onix", "npc shiny rhydon", "npc rhydon", "npc sandslash", "npc shiny pupitar", "npc kabutops", "npc omastar", "npc shiny scyther", "npc scyther", "npc shiny vileplume", "npc shiny venusaur", "npc venusaur", "npc shiny ariados", "npc heracross", "npc shiny pinsir", "npc meganium", "npc shiny meganium", "npc shiny tangela", "super kangaskhan", "npc shiny stantler", "npc strong machamp", "npc strong hitmontop", "npc strong hitmonlee", "npc strong hitmonchan", "npc strong hitmontop", "npc strong porygon2", "npc strong blissey", "npc strong miltank", "npc strong tauros", "npc strong snorlax", "npc strong ursaring", "npc strong jolteon", "npc strong raichu", "npc shiny raichu", "npc strong electabuzz", "npc ampharos", "npc shiny electabuzz", "npc shiny ampharos", "npc shiny magneton", "npc lanturn", "npc shiny lanturn", "npc Electivire", "npc Shiny Electivire", "npc Shiny Electrode", "npc Donphan",  "npc golem", "npc shiny ninetales", "npc ninetales", "npc Magmar", "npc shiny magmar", "npc shiny flareon", "npc magmortar", "npc shiny magmortar", "houndoom", "npc Arcanine", "npc Shiny Arcanine", "npc Charizard", "npc Shiny Charizard", "npc Magcargo", "npc shiny Magcargo", "npc Typhlosion", "npc Shiny Typhlosion", "npc mega charizard x"}

if isInArray(pokemons, getCreatureName(cid)) and not isSummon(cid) then return true end    

   if getPlayerStorageValue(cid, stg) >= 1 and cd ~= -1 then 

       setPlayerStorageValue(cid, stg, cd)    --allterado v1.8

       return true 

    end

    if not check and getPlayerStorageValue(cid, stg) >= 1 then

       setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd - 1)

    else

       setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd)

    end

           

    local a = getPlayerStorageValue(cid, stg)

           

    if isSummon(cid) and getPlayerStorageValue(cid, 212123) <= 0 then

       local item = getPlayerSlotItem(getCreatureMaster(cid), 8):

       doItemSetAttribute(item.uid, "burn", a)

       doItemSetAttribute(item.uid, "burndmg", damage)

    end

    

    if a <= -1 then 

    setPlayerStorageValue(cid, stg, -1)

    return true 

    end

    

if getPlayerStorageValue(cid, 8402) == -1 then

    doCreatureAddHealth(cid, -damage, 15, COLOR_BURN)  

end

    addEvent(doBurn2, 3500, cid, -1, a, damage)   

end 

function doPoison2(cid, cd, check, damage)

local stg = conds["Poison"]

    if not isCreature(cid) then return true end  --is creature?

      local pokemons = { "Ho-oh", "Lugia", "Mew", "Mewtwo", "Suicune", "Raikou", "Entei", "Moltres", "Zapdos", "Articuno", "Celebi", "Blue Tower 1", "Blue Tower 2", "Blue Tower 3", "Red Tower 1", "Red Tower 2", "Red Tower 3","npc dark mega alakazam", "npc dark mega swamper", "npc shiny fearow", "npc kingdra", "npc shiny pidgeot", "npc shiny dragonair", "npc dragonite", "npc gyarados", "npc mantine", "npc pidgeot", "npc shiny dodrio", "npc mega charizard y", "npc Mega Gardevoir", "npc Mega Gengar", "npc mega gyarados", "npc mega kabutops", "npc mega lucario", "npc mega manectric", "npc mega mawile", "npc mega sableye", "Npc mega sceptile", "npc mega swampert", "npc mega tangrowth", "npc mega tyranitar", "npc mega venusaur", "npc shiny Farfetch'd", "npc aerodactyl", "npc xatu", "npc slowking", "npc jynx", "npc shiny jynx", "npc exeguttor", "npc shiny abra", "npc shiny hypno", "npc Mr. Mime", "npc Shiny Mr. Mime", "npc alakazam", "Npc shiny alakazam", "npc espeon", "npc shiny espeon", "npc girafarig", "npc mega alakazam", "npc psychic", "npc steelix", "npc shiny golem", "npc shiny marowak", "npc shiny onix", "npc shiny rhydon", "npc rhydon", "npc sandslash", "npc shiny pupitar", "npc kabutops", "npc omastar", "npc shiny scyther", "npc scyther", "npc shiny vileplume", "npc shiny venusaur", "npc venusaur", "npc shiny ariados", "npc heracross", "npc shiny pinsir", "npc meganium", "npc shiny meganium", "npc shiny tangela", "super kangaskhan", "npc shiny stantler", "npc strong machamp", "npc strong hitmontop", "npc strong hitmonlee", "npc strong hitmonchan", "npc strong hitmontop", "npc strong porygon2", "npc strong blissey", "npc strong miltank", "npc strong tauros", "npc strong snorlax", "npc strong ursaring", "npc strong jolteon", "npc strong raichu", "npc shiny raichu", "npc strong electabuzz", "npc ampharos", "npc shiny electabuzz", "npc shiny ampharos", "npc shiny magneton", "npc lanturn", "npc shiny lanturn", "npc Electivire", "npc Shiny Electivire", "npc Shiny Electrode", "npc Donphan",  "npc golem", "npc shiny ninetales", "npc ninetales", "npc Magmar", "npc shiny magmar", "npc shiny flareon", "npc magmortar", "npc shiny magmortar", "houndoom", "npc Arcanine", "npc Shiny Arcanine", "npc Charizard", "npc Shiny Charizard", "npc Magcargo", "npc shiny Magcargo", "npc Typhlosion", "npc Shiny Typhlosion", "npc mega charizard x"}

if isInArray(pokemons, getCreatureName(cid)) and not isSummon(cid) then return true end

    ----------

    if isSummon(cid) or ehMonstro(cid) and pokes[getCreatureName(cid)] then --alterado v1.6

       local type = pokes[getCreatureName(cid)].type

       local type2 = pokes[getCreatureName(cid)].type2

       if isInArray({"poison", "steel"}, type) or isInArray({"poison", "steel"}, type2) then

          return true

       end

    end

    ---------

    if getPlayerStorageValue(cid, stg) >= 1 and cd ~= -1 then 

       setPlayerStorageValue(cid, stg, cd)    --allterado v1.8

       return true 

    end

    if not check and getPlayerStorageValue(cid, stg) >= 1 then

       setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd - 1)

    else

       setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd)

    end

           

    local a = getPlayerStorageValue(cid, stg)

           

    if isSummon(cid) and getPlayerStorageValue(cid, 212123) <= 0 then

       local item = getPlayerSlotItem(getCreatureMaster(cid), 8):

       doItemSetAttribute(item.uid, "poison", a)

       doItemSetAttribute(item.uid, "poisondmg", damage)

    end

    

    if a <= -1 or getCreatureHealth(cid) == 1 then 

    setPlayerStorageValue(cid, stg, -1)

    return true 

    end

   

    local dano = getCreatureHealth(cid)-damage <= 0 and getCreatureHealth(cid)-1 or damage 

    if getPlayerStorageValue(cid, 8402) == -1 then

    doCreatureAddHealth(cid, -dano, 8, COLOR_GRASS)  

end  

    

    addEvent(doPoison2, 1500, cid, -1, a, damage)   

end       

function doFear2(cid, cd, check, skill)

local stg = conds["Fear"]

    if not isCreature(cid) then return true end  --is creature?

  local pokemons = { "Ho-oh", "Lugia", "Mew", "Mewtwo", "Suicune", "Raikou", "Entei", "Moltres", "Zapdos", "Articuno", "Celebi", "Blue Tower 1", "Blue Tower 2", "Blue Tower 3", "Red Tower 1", "Red Tower 2", "Red Tower 3","npc dark mega alakazam", "npc dark mega swamper", "npc shiny fearow", "npc kingdra", "npc shiny pidgeot", "npc shiny dragonair", "npc dragonite", "npc gyarados", "npc mantine", "npc pidgeot", "npc shiny dodrio", "npc mega charizard y", "npc Mega Gardevoir", "npc Mega Gengar", "npc mega gyarados", "npc mega kabutops", "npc mega lucario", "npc mega manectric", "npc mega mawile", "npc mega sableye", "Npc mega sceptile", "npc mega swampert", "npc mega tangrowth", "npc mega tyranitar", "npc mega venusaur", "npc shiny Farfetch'd", "npc aerodactyl", "npc xatu", "npc slowking", "npc jynx", "npc shiny jynx", "npc exeguttor", "npc shiny abra", "npc shiny hypno", "npc Mr. Mime", "npc Shiny Mr. Mime", "npc alakazam", "Npc shiny alakazam", "npc espeon", "npc shiny espeon", "npc girafarig", "npc mega alakazam", "npc psychic", "npc steelix", "npc shiny golem", "npc shiny marowak", "npc shiny onix", "npc shiny rhydon", "npc rhydon", "npc sandslash", "npc shiny pupitar", "npc kabutops", "npc omastar", "npc shiny scyther", "npc scyther", "npc shiny vileplume", "npc shiny venusaur", "npc venusaur", "npc shiny ariados", "npc heracross", "npc shiny pinsir", "npc meganium", "npc shiny meganium", "npc shiny tangela", "super kangaskhan", "npc shiny stantler", "npc strong machamp", "npc strong hitmontop", "npc strong hitmonlee", "npc strong hitmonchan", "npc strong hitmontop", "npc strong porygon2", "npc strong blissey", "npc strong miltank", "npc strong tauros", "npc strong snorlax", "npc strong ursaring", "npc strong jolteon", "npc strong raichu", "npc shiny raichu", "npc strong electabuzz", "npc ampharos", "npc shiny electabuzz", "npc shiny ampharos", "npc shiny magneton", "npc lanturn", "npc shiny lanturn", "npc Electivire", "npc Shiny Electivire", "npc Shiny Electrode", "npc Donphan",  "npc golem", "npc shiny ninetales", "npc ninetales", "npc Magmar", "npc shiny magmar", "npc shiny flareon", "npc magmortar", "npc shiny magmortar", "houndoom", "npc Arcanine", "npc Shiny Arcanine", "npc Charizard", "npc Shiny Charizard", "npc Magcargo", "npc shiny Magcargo", "npc Typhlosion", "npc Shiny Typhlosion", "npc mega charizard x"}

if isInArray(pokemons, getCreatureName(cid)) and not isSummon(cid) then return true end    

    if getPlayerStorageValue(cid, stg) >= 1 and cd ~= -1 then 

       setPlayerStorageValue(cid, stg, cd)    --allterado v1.8

       return true 

    end

    if not check and getPlayerStorageValue(cid, stg) >= 1 then

       setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd - 1)

    else

       setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd)

    end

           

    local a = getPlayerStorageValue(cid, stg)

           

    if isSummon(cid) and getPlayerStorageValue(cid, 212123) <= 0 then

       local item = getPlayerSlotItem(getCreatureMaster(cid), 8):

       doItemSetAttribute(item.uid, "fear", a)

       doItemSetAttribute(item.uid, "fearSkill", skill)

    end

    

    if a <= -1 then 

    if getCreatureCondition(cid, CONDITION_PARALYZE) == true then

       doRemoveCondition(cid, CONDITION_PARALYZE)

       addEvent(doAddCondition, 10, cid, paralizeArea2)            

    end

    if not isSleeping(cid) and not isParalyze(cid) then

       doRegainSpeed(cid)         --alterado 

    end

    setPlayerStorageValue(cid, stg, -1)

    return true 

    end

    

    if skill == "Roar" then

       eff = 139

    else                --edited Roar

       eff = 139

    end

    

    if math.random(1, 6) >= 4 then

        doSendMagicEffect(getThingPos(cid), eff)

    end

    local isTarget = isSummon(cid) and getCreatureTarget(getCreatureMaster(cid)) or getCreatureTarget(cid)

    if isCreature(isTarget) and not isSleeping(cid) and not isParalyze(cid) and getPlayerStorageValue(cid, 654878) <= 0 then --alterado v1.6

        local dir = getCreatureDirectionToTarget(cid, isTarget)

        doChangeSpeed(cid, -getCreatureSpeed(cid))

        doChangeSpeed(cid, 250)

        doPushCreature(cid, roardirections[dir][1], 1, 0)  --alterado v1.6

        doChangeSpeed(cid, -250)

    end

    local pos = getThingPos(cid)

    addEvent(doSendMagicEffect, math.random(0, 450), pos, eff)

 

    addEvent(doFear2, 400, cid, -1, a, skill)   

end      

function doStun2(cid, cd, eff, check, spell)

local stg = conds["Stun"]

    if not isCreature(cid) then return true end  --is creature?

  local pokemons = { "Ho-oh", "Lugia", "Mew", "Mewtwo", "Suicune", "Raikou", "Entei", "Moltres", "Zapdos", "Articuno", "Celebi", "Blue Tower 1", "Blue Tower 2", "Blue Tower 3", "Red Tower 1", "Red Tower 2", "Red Tower 3","npc dark mega alakazam", "npc dark mega swamper", "npc shiny fearow", "npc kingdra", "npc shiny pidgeot", "npc shiny dragonair", "npc dragonite", "npc gyarados", "npc mantine", "npc pidgeot", "npc shiny dodrio", "npc mega charizard y", "npc Mega Gardevoir", "npc Mega Gengar", "npc mega gyarados", "npc mega kabutops", "npc mega lucario", "npc mega manectric", "npc mega mawile", "npc mega sableye", "Npc mega sceptile", "npc mega swampert", "npc mega tangrowth", "npc mega tyranitar", "npc mega venusaur", "npc shiny Farfetch'd", "npc aerodactyl", "npc xatu", "npc slowking", "npc jynx", "npc shiny jynx", "npc exeguttor", "npc shiny abra", "npc shiny hypno", "npc Mr. Mime", "npc Shiny Mr. Mime", "npc alakazam", "Npc shiny alakazam", "npc espeon", "npc shiny espeon", "npc girafarig", "npc mega alakazam", "npc psychic", "npc steelix", "npc shiny golem", "npc shiny marowak", "npc shiny onix", "npc shiny rhydon", "npc rhydon", "npc sandslash", "npc shiny pupitar", "npc kabutops", "npc omastar", "npc shiny scyther", "npc scyther", "npc shiny vileplume", "npc shiny venusaur", "npc venusaur", "npc shiny ariados", "npc heracross", "npc shiny pinsir", "npc meganium", "npc shiny meganium", "npc shiny tangela", "super kangaskhan", "npc shiny stantler", "npc strong machamp", "npc strong hitmontop", "npc strong hitmonlee", "npc strong hitmonchan", "npc strong hitmontop", "npc strong porygon2", "npc strong blissey", "npc strong miltank", "npc strong tauros", "npc strong snorlax", "npc strong ursaring", "npc strong jolteon", "npc strong raichu", "npc shiny raichu", "npc strong electabuzz", "npc ampharos", "npc shiny electabuzz", "npc shiny ampharos", "npc shiny magneton", "npc lanturn", "npc shiny lanturn", "npc Electivire", "npc Shiny Electivire", "npc Shiny Electrode", "npc Donphan",  "npc golem", "npc shiny ninetales", "npc ninetales", "npc Magmar", "npc shiny magmar", "npc shiny flareon", "npc magmortar", "npc shiny magmortar", "houndoom", "npc Arcanine", "npc Shiny Arcanine", "npc Charizard", "npc Shiny Charizard", "npc Magcargo", "npc shiny Magcargo", "npc Typhlosion", "npc Shiny Typhlosion", "npc mega charizard x"}

if isInArray(pokemons, getCreatureName(cid)) and not isSummon(cid) then return true end    

    if not canDoMiss(cid, spell) then return true end

    if getPlayerStorageValue(cid, stg) >= 1 and cd ~= -1 then 

       setPlayerStorageValue(cid, stg, cd)    --allterado v1.8

       return true 

    end

    if not check and getPlayerStorageValue(cid, stg) >= 1 then

       setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd - 1)

    else

       setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd)

    end

           

    local a = getPlayerStorageValue(cid, stg)

           

    if isSummon(cid) and getPlayerStorageValue(cid, 212123) <= 0 then

       local item = getPlayerSlotItem(getCreatureMaster(cid), 8):

       doItemSetAttribute(item.uid, "stun", a)

       doItemSetAttribute(item.uid, "stunEff", eff)

       doItemSetAttribute(item.uid, "stunSpell", spell)

    end

    

    if a <= -1 then

    doRemoveCondition(cid, CONDITION_PARALYZE)

    if not isSleeping(cid) and not isParalyze(cid) then

       addEvent(doRegainSpeed, 50, cid)   --alterado 

    end

    setPlayerStorageValue(cid, stg, -1)

    return true 

    end

    

    if getCreatureCondition(cid, CONDITION_PARALYZE) == false then

       doAddCondition(cid, paralizeArea2)

    end    

    doSendMagicEffect(getThingPos(cid), eff)

    addEvent(doStun2, 1000, cid, -1, eff, a, spell)   

end 

function doParalyze2(cid, cd, eff, check, first)

local stg = conds["Paralyze"]

    if not isCreature(cid) then return true end  --is creature?

  local pokemons = { "Ho-oh", "Lugia", "Mew", "Mewtwo", "Suicune", "Raikou", "Entei", "Moltres", "Zapdos", "Articuno", "Celebi", "Blue Tower 1", "Blue Tower 2", "Blue Tower 3", "Red Tower 1", "Red Tower 2", "Red Tower 3","npc dark mega alakazam", "npc dark mega swamper", "npc shiny fearow", "npc kingdra", "npc shiny pidgeot", "npc shiny dragonair", "npc dragonite", "npc gyarados", "npc mantine", "npc pidgeot", "npc shiny dodrio", "npc mega charizard y", "npc Mega Gardevoir", "npc Mega Gengar", "npc mega gyarados", "npc mega kabutops", "npc mega lucario", "npc mega manectric", "npc mega mawile", "npc mega sableye", "Npc mega sceptile", "npc mega swampert", "npc mega tangrowth", "npc mega tyranitar", "npc mega venusaur", "npc shiny Farfetch'd", "npc aerodactyl", "npc xatu", "npc slowking", "npc jynx", "npc shiny jynx", "npc exeguttor", "npc shiny abra", "npc shiny hypno", "npc Mr. Mime", "npc Shiny Mr. Mime", "npc alakazam", "Npc shiny alakazam", "npc espeon", "npc shiny espeon", "npc girafarig", "npc mega alakazam", "npc psychic", "npc steelix", "npc shiny golem", "npc shiny marowak", "npc shiny onix", "npc shiny rhydon", "npc rhydon", "npc sandslash", "npc shiny pupitar", "npc kabutops", "npc omastar", "npc shiny scyther", "npc scyther", "npc shiny vileplume", "npc shiny venusaur", "npc venusaur", "npc shiny ariados", "npc heracross", "npc shiny pinsir", "npc meganium", "npc shiny meganium", "npc shiny tangela", "super kangaskhan", "npc shiny stantler", "npc strong machamp", "npc strong hitmontop", "npc strong hitmonlee", "npc strong hitmonchan", "npc strong hitmontop", "npc strong porygon2", "npc strong blissey", "npc strong miltank", "npc strong tauros", "npc strong snorlax", "npc strong ursaring", "npc strong jolteon", "npc strong raichu", "npc shiny raichu", "npc strong electabuzz", "npc ampharos", "npc shiny electabuzz", "npc shiny ampharos", "npc shiny magneton", "npc lanturn", "npc shiny lanturn", "npc Electivire", "npc Shiny Electivire", "npc Shiny Electrode", "npc Donphan",  "npc golem", "npc shiny ninetales", "npc ninetales", "npc Magmar", "npc shiny magmar", "npc shiny flareon", "npc magmortar", "npc shiny magmortar", "houndoom", "npc Arcanine", "npc Shiny Arcanine", "npc Charizard", "npc Shiny Charizard", "npc Magcargo", "npc shiny Magcargo", "npc Typhlosion", "npc Shiny Typhlosion", "npc mega charizard x"}

if isInArray(pokemons, getCreatureName(cid)) and not isSummon(cid) then return true end    

    if getPlayerStorageValue(cid, stg) >= 1 and cd ~= -1 then 

       setPlayerStorageValue(cid, stg, cd)    --allterado v1.8

       return true 

    end

    if not check and getPlayerStorageValue(cid, stg) >= 1 then

       setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd - 1)

    else

       setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd)

    end

           

    local a = getPlayerStorageValue(cid, stg)

           

    if isSummon(cid) and getPlayerStorageValue(cid, 212123) <= 0 then

       local item = getPlayerSlotItem(getCreatureMaster(cid), 8):

       doItemSetAttribute(item.uid, "paralyze", a)

       doItemSetAttribute(item.uid, "paralyzeEff", eff)

    end

    

    if a <= -1 then 

    if isPlayer(cid) then

       if not isSleeping(cid) then   --alterado

          mayNotMove(cid, false)

       end

    else

       if getCreatureCondition(cid, CONDITION_PARALYZE) == true then

          doRemoveCondition(cid, CONDITION_PARALYZE)

          addEvent(doAddCondition, 10, cid, paralizeArea2)            

       end

       if not isSleeping(cid) then

          doRegainSpeed(cid)          --alterado

       end

    end   

    setPlayerStorageValue(cid, stg, -1)

    return true 

    end

    

    if isPlayer(cid) then

       mayNotMove(cid, true)

    else                        --alterado v1.6

       doChangeSpeed(cid, -2000)

    end 

    doSendMagicEffect(getThingPos(cid), eff)

    addEvent(doParalyze2, 1000, cid, -1, eff, a, false)   

end       

function doSleep2(cid, cd, check, first)        

local stg = conds["Sleep"]

    if not isCreature(cid) then return true end  --is creature?

  local pokemons = { "Ho-oh", "Lugia", "Mew", "Mewtwo", "Suicune", "Raikou", "Entei", "Moltres", "Zapdos", "Articuno", "Celebi", "Blue Tower 1", "Blue Tower 2", "Blue Tower 3", "Red Tower 1", "Red Tower 2", "Red Tower 3","npc dark mega alakazam", "npc dark mega swamper", "npc shiny fearow", "npc kingdra", "npc shiny pidgeot", "npc shiny dragonair", "npc dragonite", "npc gyarados", "npc mantine", "npc pidgeot", "npc shiny dodrio", "npc mega charizard y", "npc Mega Gardevoir", "npc Mega Gengar", "npc mega gyarados", "npc mega kabutops", "npc mega lucario", "npc mega manectric", "npc mega mawile", "npc mega sableye", "Npc mega sceptile", "npc mega swampert", "npc mega tangrowth", "npc mega tyranitar", "npc mega venusaur", "npc shiny Farfetch'd", "npc aerodactyl", "npc xatu", "npc slowking", "npc jynx", "npc shiny jynx", "npc exeguttor", "npc shiny abra", "npc shiny hypno", "npc Mr. Mime", "npc Shiny Mr. Mime", "npc alakazam", "Npc shiny alakazam", "npc espeon", "npc shiny espeon", "npc girafarig", "npc mega alakazam", "npc psychic", "npc steelix", "npc shiny golem", "npc shiny marowak", "npc shiny onix", "npc shiny rhydon", "npc rhydon", "npc sandslash", "npc shiny pupitar", "npc kabutops", "npc omastar", "npc shiny scyther", "npc scyther", "npc shiny vileplume", "npc shiny venusaur", "npc venusaur", "npc shiny ariados", "npc heracross", "npc shiny pinsir", "npc meganium", "npc shiny meganium", "npc shiny tangela", "super kangaskhan", "npc shiny stantler", "npc strong machamp", "npc strong hitmontop", "npc strong hitmonlee", "npc strong hitmonchan", "npc strong hitmontop", "npc strong porygon2", "npc strong blissey", "npc strong miltank", "npc strong tauros", "npc strong snorlax", "npc strong ursaring", "npc strong jolteon", "npc strong raichu", "npc shiny raichu", "npc strong electabuzz", "npc ampharos", "npc shiny electabuzz", "npc shiny ampharos", "npc shiny magneton", "npc lanturn", "npc shiny lanturn", "npc Electivire", "npc Shiny Electivire", "npc Shiny Electrode", "npc Donphan",  "npc golem", "npc shiny ninetales", "npc ninetales", "npc Magmar", "npc shiny magmar", "npc shiny flareon", "npc magmortar", "npc shiny magmortar", "houndoom", "npc Arcanine", "npc Shiny Arcanine", "npc Charizard", "npc Shiny Charizard", "npc Magcargo", "npc shiny Magcargo", "npc Typhlosion", "npc Shiny Typhlosion", "npc mega charizard x"}

if isInArray(pokemons, getCreatureName(cid)) and not isSummon(cid) then return true end    

    if getPlayerStorageValue(cid, stg) >= 1 and cd ~= -1 then 

       setPlayerStorageValue(cid, stg, cd)    --allterado v1.8

       return true 

    end

    if not isSleeping(cid) then

        addEvent(doSendSleepEffect, 500, cid)

    end

    

    if not check and getPlayerStorageValue(cid, stg) >= 1 then

       setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd - 1)

    else

       setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd)

    end

           

    local a = getPlayerStorageValue(cid, stg)

          

    if isSummon(cid) and getPlayerStorageValue(cid, 212123) <= 0 then

       local item = getPlayerSlotItem(getCreatureMaster(cid), 8):

       doItemSetAttribute(item.uid, "sleep", a)

    end

    

    if a <= -1 then 

    if not isPlayer(cid) then

       local dittoStg = getPlayerStorageValue(cid, 1010) 

       if getCreatureName(cid) == "Ditto" and isSummon(cid) and tostring(dittoStg) and dittoStg ~= "Ditto" then

          doSetCreatureOutfit(cid, {lookType = getItemAttribute(getPlayerSlotItem(getCreatureMaster(cid), 8).uid, "transOutfit")}, -1)

       else

          doRemoveCondition(cid, CONDITION_OUTFIT)

       end

       if getPlayerStorageValue(cid, 625877) ~= -1 then 

          doSetCreatureOutfit(cid, {lookType = getPlayerStorageValue(cid, 625877)}, -1)   --alterado v1.6

       end 

    end

    if isPlayer(cid) then

       if not isParalyze(cid) then

          mayNotMove(cid, false)   --alterado

       end

    else

       if getCreatureCondition(cid, CONDITION_PARALYZE) == true then

          doRemoveCondition(cid, CONDITION_PARALYZE)

          addEvent(doAddCondition, 10, cid, paralizeArea2)            

       end

       if not isParalyze(cid) then

          doRegainSpeed(cid)   --alterado

       end

    end

    setPlayerStorageValue(cid, stg, -1)

    return true 

    end

    

    if first then 

       if getCreatureName(cid) == "Ursaring" and getCreatureCondition(cid, CONDITION_OUTFIT) == true then

             

       elseif not isPlayer(cid) then

          if isInArray({604, 605, 1015, 1016, 1183, 1184}, getCreatureOutfit(cid).lookType) then

             Info = 0                                                                            --alterado v1.6

          else

             Info = getMonsterInfo(getCreatureName(cid)).lookCorpse                

          end                

          local look = getCreatureOutfit(cid) 

          ---------

          local dittoStg = getPlayerStorageValue(cid, 1010) 

          if getCreatureName(cid) == "Ditto" and isSummon(cid) and tostring(dittoStg) and dittoStg ~= "Ditto" then

             local InfoDitto = getMonsterInfo(tostring(dittoStg)).lookCorpse

             if InfoDitto ~= 0 and look.lookType ~= 0 then             

                --doSetCreatureOutfit(cid, {lookType = 0, lookTypeEx = getMonsterInfo(tostring(dittoStg)).lookCorpse}, -1)

             end   

          else

             if getCreatureName(cid) == "Shiny Golem" and getCreatureOutfit(cid).lookType == 1403 then

                doRemoveCondition(cid, CONDITION_OUTFIT)                                                                                                  

             elseif Info ~= 0 and look.lookType ~= 0 then

                --doSetCreatureOutfit(cid, {lookType = 0, lookTypeEx = getMonsterInfo(getCreatureName(cid)).lookCorpse}, -1)

             end

          end

       end

    end

                                      --alterado v1.6

    if isPlayer(cid) then

       mayNotMove(cid, true)

    else

       doChangeSpeed(cid, -getCreatureSpeed(cid))

    end

    addEvent(doSleep2, 1000, cid, -1, a, false)

end   

function doLeech2(cid, attacker, cd, check, damage)

local stg = conds["Leech"]

    if not isCreature(cid) then return true end  --is creature?

  local pokemons = { "Ho-oh", "Lugia", "Mew", "Mewtwo", "Suicune", "Raikou", "Entei", "Moltres", "Zapdos", "Articuno", "Celebi", "Blue Tower 1", "Blue Tower 2", "Blue Tower 3", "Red Tower 1", "Red Tower 2", "Red Tower 3","npc dark mega alakazam", "npc dark mega swamper", "npc shiny fearow", "npc kingdra", "npc shiny pidgeot", "npc shiny dragonair", "npc dragonite", "npc gyarados", "npc mantine", "npc pidgeot", "npc shiny dodrio", "npc mega charizard y", "npc Mega Gardevoir", "npc Mega Gengar", "npc mega gyarados", "npc mega kabutops", "npc mega lucario", "npc mega manectric", "npc mega mawile", "npc mega sableye", "Npc mega sceptile", "npc mega swampert", "npc mega tangrowth", "npc mega tyranitar", "npc mega venusaur", "npc shiny Farfetch'd", "npc aerodactyl", "npc xatu", "npc slowking", "npc jynx", "npc shiny jynx", "npc exeguttor", "npc shiny abra", "npc shiny hypno", "npc Mr. Mime", "npc Shiny Mr. Mime", "npc alakazam", "Npc shiny alakazam", "npc espeon", "npc shiny espeon", "npc girafarig", "npc mega alakazam", "npc psychic", "npc steelix", "npc shiny golem", "npc shiny marowak", "npc shiny onix", "npc shiny rhydon", "npc rhydon", "npc sandslash", "npc shiny pupitar", "npc kabutops", "npc omastar", "npc shiny scyther", "npc scyther", "npc shiny vileplume", "npc shiny venusaur", "npc venusaur", "npc shiny ariados", "npc heracross", "npc shiny pinsir", "npc meganium", "npc shiny meganium", "npc shiny tangela", "super kangaskhan", "npc shiny stantler", "npc strong machamp", "npc strong hitmontop", "npc strong hitmonlee", "npc strong hitmonchan", "npc strong hitmontop", "npc strong porygon2", "npc strong blissey", "npc strong miltank", "npc strong tauros", "npc strong snorlax", "npc strong ursaring", "npc strong jolteon", "npc strong raichu", "npc shiny raichu", "npc strong electabuzz", "npc ampharos", "npc shiny electabuzz", "npc shiny ampharos", "npc shiny magneton", "npc lanturn", "npc shiny lanturn", "npc Electivire", "npc Shiny Electivire", "npc Shiny Electrode", "npc Donphan"}

if isInArray(pokemons, getCreatureName(cid)) and not isSummon(cid) then return true end    

    if attacker ~= 0 and not isCreature(attacker) then return true end  --is creature?

    if getPlayerStorageValue(cid, stg) >= 1 and cd ~= -1 then 

       setPlayerStorageValue(cid, stg, cd)    --allterado v1.8

       return true 

    end

    if not check and getPlayerStorageValue(cid, stg) >= 1 then

       setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd - 1)

    else

       setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd)

    end

           

    local a = getPlayerStorageValue(cid, stg)

           

    if isSummon(cid) and getPlayerStorageValue(cid, 212123) <= 0 then

       local item = getPlayerSlotItem(getCreatureMaster(cid), 8):

       doItemSetAttribute(item.uid, "leech", a)

       doItemSetAttribute(item.uid, "leechdmg", damage)

    end

    

    if a <= -1 then 

    setPlayerStorageValue(cid, stg, -1)

    return true 

    end

    

    local life = getCreatureHealth(cid)

    ------

if getPlayerStorageValue(cid, 8402) == -1 then

    doCreatureAddHealth(cid, -damage)

    doSendAnimatedText(getThingPos(cid), "-"..damage.."", 144)

    doSendMagicEffect(getThingPos(cid), 45)

------

    local newlife = life - getCreatureHealth(cid)

    if newlife >= 1 and attacker ~= 0 then

        doSendMagicEffect(getThingPos(attacker), 14)

        doCreatureAddHealth(attacker, newlife)

        doSendAnimatedText(getThingPos(attacker), "+"..newlife.."", 32)

    end 

end

    addEvent(doLeech2, 2000, cid, attacker, -1, a, damage)   

end 

function doBuff2(cid, cd, eff, check, buff, first, attr)

    if not isCreature(cid) then return true end  --is creature?

---------------------

local atributo = attr and attr or ""

if first and atributo == "" then

for i = 1, 3 do 

    if getPlayerStorageValue(cid, Buffs[2]) <= 0 then

       atributo = Buffs[1]

       break

    end

end

end

if atributo == "" then return true end

if ehMonstro(cid) then atributo = "Buff1" end

----------------------

local stg = conds[atributo]

    if getPlayerStorageValue(cid, stg) >= 1 and cd ~= -1 then return true end  --n usar 2x

    if not check and getPlayerStorageValue(cid, stg) >= 1 then

       setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd - 1)

    else

       setPlayerStorageValue(cid, stg, getPlayerStorageValue(cid, stg) + cd)

    end

           

    local a = getPlayerStorageValue(cid, stg)

           

    if isSummon(cid) and getPlayerStorageValue(cid, 212123) <= 0 then

       local item = getPlayerSlotItem(getCreatureMaster(cid), 8):

       doItemSetAttribute(item.uid, atributo, a)

       doItemSetAttribute(item.uid, atributo.."eff", eff)

       doItemSetAttribute(item.uid, atributo.."skill", buff)

    end

    

    if a <= -1 then               --alterado v1.6

    if isInArray({"Psychic Sight", "Heal Bell", "Future Sight", "Camouflage", "Acid Armor", "Iron Defense", "Minimize", "Bug Fighter", "Ancient Fury", "Iron Defense2", "Bug Fighter2", "Crystal Defense"}, buff) then

       if not isSleeping(cid) then

          doRemoveCondition(cid, CONDITION_OUTFIT)

       end

       setPlayerStorageValue(cid, 9658783, -1)

       setPlayerStorageValue(cid, 625877, -1) --alterado v1.6 

    end 

    if isInArray({"Eruption", "Elecball", "Strafe", "Agility", "Ancient Fury", "War Dog", "Fighter Spirit", "Furious Legs", "Ultimate Champion", "Bug Fighter", "Bug Fighter2"}, buff) then

       setPlayerStorageValue(cid, 374896, -1)   --alterado v1.6

    end                                        

    setPlayerStorageValue(cid, stg, -1)      

    return true 

    end

     

    doSendMagicEffect(getThingPos(cid), eff)

        

    if first then

    if buff == "Strafe" or buff == "Agility" then

       setPlayerStorageValue(cid, 374896, 1) --velo atk --alterado v1.6

       doRaiseStatus(cid, 0, 0, 100, a)

    elseif buff == "Outrage" then

    doRaiseStatus(cid, 0, 1.4, 0, a)

    elseif buff == "Eruption" or buff == "Elecball" then

       setPlayerStorageValue(cid, 374896, 1) --velo atk --alterado v1.6

       doRaiseStatus(cid, 2, 0, 150, a)

    elseif buff == "Tailwind" then

       doRaiseStatus(cid, 0, 0, 200, a)

    elseif buff == "Rage" then

       doRaiseStatus(cid, 2, 0, 0, a)

    elseif buff == "Harden" then

       doRaiseStatus(cid, 0, 2, 0, a)

    elseif buff == "Calm Mind" then

       doRaiseStatus(cid, 0, 2, 0, a)

    elseif buff == "Ancient Fury" then

       doSetCreatureOutfit(cid, {lookType = outFurys[getCreatureName(cid)].outFury}, a*1000)

       setPlayerStorageValue(cid, 374896, 1)  --velo atk

       if getCreatureName(cid) == "Shiny Charizard" or getCreatureName(cid) == "Elder Charizard" then 

          doRaiseStatus(cid, 2, 0, 0, a)    --atk melee     --alterado v1.6

       else

          doRaiseStatus(cid, 0, 2, 0, a)    --def

       end   

       setPlayerStorageValue(cid, 625877, outFurys[getCreatureName(cid)].outFury)     --alterado v1.6

    elseif buff == "War Dog" then

       doRaiseStatus(cid, 1.5, 1.5, 0, a)

       setPlayerStorageValue(cid, 374896, 1)  --velo atk

    elseif buff == "Rest" then

       doSleep2(cid, cd, getPlayerStorageValue(cid, conds["Sleep"]), true) 

       doCreatureAddHealth(cid, getCreatureMaxHealth(cid))

    elseif isInArray({"Fighter Spirit", "Furious Legs", "Ultimate Champion"}, buff) then

       doRaiseStatus(cid, 1.5, 0, 0, a)    --atk melee    --alterado v1.6

       setPlayerStorageValue(cid, 374896, 1)  --velo atk 

       addEvent(setPlayerStorageValue, a*1000, cid, 465987, -1)                                              

    elseif isInArray({"Psychic Sight", "Heal Bell", "Future Sight", "Camouflage", "Acid Armor", "Iron Defense", "Minimize", "Iron Defense2", "Crystal Defense", "Lightning Hell", "Hell Fire", "Frost Tornado", "Instant Teleportation"}, buff) then

       doSetCreatureOutfit(cid, {lookType = outImune[buff]}, -1)

       setPlayerStorageValue(cid, 9658783, 1)  

       setPlayerStorageValue(cid, 625877, outImune[buff]) --alterado v1.6                             

    elseif buff == "Bug Fighter" then

       setPlayerStorageValue(cid, 374896, 1)  --velo atk  --alterado v1.6

       doRaiseStatus(cid, 1.5, 1.5, 100, a)

       doSetCreatureOutfit(cid, {lookType = 1448}, a*1000)

       setPlayerStorageValue(cid, 625877, 1448)  --alterado v1.6

    end                                                                            

    end 

    addEvent(doBuff2, 1000, cid, -1, eff, a, buff, false, atributo)   

end

 

if ret.buff and ret.buff ~= "" then

   doBuff2(ret.id, ret.cd, ret.eff, ret.check, ret.buff, ret.first, (ret.attr and ret.attr or false))

end

if isSummon(ret.id) then

    if getPokemonBoost(ret.id) ~= 0 and math.random(1, 100) <= getPokemonBoost(ret.id) then   --sistema "pegou no boost"

        if ret.cond and not isInArray({"Poison", "Leech", "Fear"}, ret.cond) then 

            doSendAnimatedText(getThingPosWithDebug(ret.id), "BOOST", 215)   --alterado v1.8   

            return true

        end

    end

    

    local Tiers, master = {

        [8] = {chance = Cure1},

        [9] = {chance = Cure2},

        [10] = {chance = Cure3},

        [11] = {chance = Cure4},

        [12] = {chance = Cure5},

        [13] = {chance = Cure6},

        [14] = {chance = Cure7}

    }, getCreatureMaster(ret.id)

    

    if getPlayerStorageValue(master, 52480) < 1 then

        local held_item = getItemAttribute(getPlayerSlotItem(master, 8).uid, "heldy")

        

        if held_item and Tiers[held_item] then

            if math.random(1, 100) <= Tiers[held_item] then

            doSendAnimatedText(getThingPos(ret.id), "MED", 215)

                doSendMagicEffect(getThingPos(ret.id), 14)

                return true

            end

        end

    end

end

if ret.cond and ret.cond == "Miss" then

    doMiss2(ret.id, ret.cd, ret.eff, ret.check, ret.spell)

elseif ret.cond and ret.cond == "Silence" then

    doSilence2(ret.id, ret.cd, ret.eff, ret.check)

elseif ret.cond and ret.cond == "Slow" then

    doSlow2(ret.id, ret.cd, ret.eff, ret.check, ret.first)

elseif ret.cond and ret.cond == "Confusion" then

    doConfusion2(ret.id, ret.cd, ret.check)

elseif ret.cond and ret.cond == "Burn" then

    doBurn2(ret.id, ret.cd, ret.check, ret.damage)

elseif ret.cond and ret.cond == "Poison" then

    doPoison2(ret.id, ret.cd, ret.check, ret.damage)

elseif ret.cond and ret.cond == "Fear" then

    doFear2(ret.id, ret.cd, ret.check, ret.skill)

elseif ret.cond and ret.cond == "Stun" then

    doStun2(ret.id, ret.cd, ret.eff, ret.check, ret.spell)

elseif ret.cond and ret.cond == "Paralyze" then

    doParalyze2(ret.id, ret.cd, ret.eff, ret.check, ret.first)

elseif ret.cond and ret.cond == "Sleep" then

    doSleep2(ret.id, ret.cd, ret.check, ret.first)

elseif ret.cond and ret.cond == "Leech" then

    doLeech2(ret.id, ret.attacker, ret.cd, ret.check, ret.damage)

end

end

--------------------------------

function cleanBuffs2(item)

if item ~= 0 then

   for i = 1, 3 do

       doItemEraseAttribute(item, Buffs[1])

       doItemEraseAttribute(item, Buffs[1].."eff")

       doItemEraseAttribute(item, Buffs[1].."skill")

   end   

end

end 

--------------------------------

function doCureStatus(cid, type, playerballs)

    if not isCreature(cid) then return true end

    if playerballs and isPlayer(cid) then

        local bp = getPlayerSlotItem(cid, CONST_SLOT_BACKPACK)

        local mb = getPlayerSlotItem(cid, 8):

        if isPokeball(mb.itemid) then

            if not type or type == "all" then

                for b = 1, #injuries2 do

                doItemSetAttribute(mb.uid, ""..injuries2.n.."", -1)

                end

            else

                doItemSetAttribute(mb.uid, ""..type.."", -1)

            end

        end

    for bname, balls in pairs (pokeballs) do

        for times = 1,3 do

        local items = getItemsInContainerById(bp.uid, balls.all[times]) 

            for _, uid in pairs(items) do

                if not type or type == "all" then

                    for b = 1, #injuries2 do

                    doItemSetAttribute(uid, ""..injuries2.n.."", -1)

                    end

                else

                    doItemSetAttribute(uid, ""..type.."", -1)

                end

            end

        end

    end

    end

    if type == "all" then

        for a = 1, #injuries2 do

            setPlayerStorageValue(cid, injuries2[a].m, -1)

        end

    return true

    end

    for a, b in pairs (injuries2) do

        if b.n == type then

        setPlayerStorageValue(cid, b.m, -1)

        end

    end

end 

---------------------------------

function isWithCondition(cid)

for i = 1, #injuries2 do 

   if getPlayerStorageValue(cid, injuries2.m) >= 1 then

      return true

   end

end

return false

end

---------------------------------

function doCureBallStatus(item, type)

    if not type or type == "all" then

        for b = 1, #injuries2 do

        doItemSetAttribute(item, ""..injuries2.n.."", -1)

        end

    else

        doItemSetAttribute(item, ""..type.."", -1)

    end

end

---------------------------------

function isBurning(cid)

    if not isCreature(cid) then return false end

    if getPlayerStorageValue(cid, conds["Burn"]) >= 0 then return true end

return false

end

function isPoisoned(cid)

    if not isCreature(cid) then return false end

    if getPlayerStorageValue(cid, conds["Poison"]) >= 0 then return true end

return false

end

function isSilence(cid)

    if not isCreature(cid) then return false end

    if getPlayerStorageValue(cid, conds["Silence"]) >= 0 then return true end

return false

end

function isParalyze(cid)      

    if not isCreature(cid) then return false end

    if getPlayerStorageValue(cid, conds["Paralyze"]) >= 0 then return true end

return false

end

    

function isSleeping(cid)

    if not isCreature(cid) then return false end

    if getPlayerStorageValue(cid, conds["Sleep"]) >= 0 then return true end

return false

end

function isWithFear(cid)

    if not isCreature(cid) then return false end

    if getPlayerStorageValue(cid, conds["Fear"]) >= 0 then return true end

return false

end 

-----------------------------------

function doMoveInArea2(cid, eff, area, element, min, max, spell, ret)

if not isCreature(cid) then return true end

   

   local pos = getPosfromArea(cid, area)  --alterado v1.8

   setPlayerStorageValue(cid, 21101, -1) 

   

   local skills = {"Skull Bash", "Gust", "Water Pulse", "Stick Throw", "Last Resort", "Overheat", "Toxic", "Take Down", "Gyro Ball", "Frost Tornado", "Iceshock", "Hell Fire", "Lightning Hell"} --alterado v1.7

   local n = 0 

   local l = 0

while n < #pos do

if not isCreature(cid) then return true end 

if isSleeping(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end   

if isWithFear(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

   n = n+1

   thing = {x=pos[n].x,y=pos[n].y,z=pos[n].z,stackpos=253}

   local pid = getThingFromPosWithProtect(thing)

   ----

   if pid ~= cid then

   if spell and isInArray(skills, spell) then

      if spell == "Stick Throw" then

         addEvent(sendEffWithProtect, l*300, cid, pos[n], eff)

         addEvent(sendMoveBack, 1200, cid, pos, eff, min, max)

         addEvent(doMoveDano2, l*300, cid, pid, element, min, max, ret, spell) --alterado v1.6   

      elseif spell and spell == "Gyro Ball" then   --alterado v1.7

         pos[n].x = pos[n].x+1

         addEvent(sendEffWithProtect, l*200, cid, pos[n], eff)

         addEvent(doMoveDano2, l*200, cid, pid, element, min, max, ret, spell) 

      else

         addEvent(sendEffWithProtect, l*200, cid, pos[n], eff)

         addEvent(doMoveDano2, l*200, cid, pid, element, min, max, ret, spell)  --alterado v1.6  

      end

   elseif spell and spell == "Epicenter" then

      local random = math.random(50, 500)   

      addEvent(sendEffWithProtect, random, cid, pos[n], eff)

      addEvent(doDanoWithProtect, random, cid, GROUNDDAMAGE, pos[n], crusher, -min, -max, 255)

   elseif spell and spell == "Shadowave" then

      posi = {x=pos[n].x, y=pos[n].y+1, z=pos[n].z}

      sendEffWithProtect(cid, posi, eff)

      doMoveDano2(cid, pid, element, min, max, ret, spell) --alterado v1.6 

   elseif spell and spell == "Surf" then

      addEvent(sendEffWithProtect, math.random(50, 500), cid, pos[n], eff)

      addEvent(doMoveDano2, 400, cid, pid, element, min, max, ret, spell)  --alterado v1.6 

   elseif spell and spell == "Sand Attack" then

      addEvent(sendEffWithProtect, n*200, cid, pos[n], eff)

      addEvent(doMoveDano2, n*200, cid, pid, element, min, max, ret, spell) --alterado v1.6 

   elseif spell and (spell == "Muddy Water" or spell == "Venom Motion") then

      local arr = {

      [1] = 0, [2] = 0, [3] = 0, [4] = 200, [5] = 200, [6] = 200, [7] = 400, [8] = 400, [9] = 400, [10] = 600, [11] = 600,

      [12] = 600, [13] = 800, [14] = 800, [15] = 800

      }

      local time = {0, 200, 400, 600, 800}

             

      addEvent(sendEffWithProtect, arr[n], cid, pos[n], eff)

      addEvent(doMoveDano2, arr[n], cid, pid, element, min, max, ret, spell)

   elseif spell and (spell == "Inferno" or spell == "Fissure") then

      addEvent(sendEffWithProtect, math.random(0, 500), cid, pos[n], eff)

      addEvent(doMoveDano2, math.random(0, 500), cid, pid, element, min, max, ret, spell) 

   elseif spell == "Last Resort" then

local pos = getThingPosWithDebug(cid)

local areas = {rock5, rock4, rock3, rock2, rock1, rock5, rock4, rock3, rock2, rock1}

for i = 0, 9 do

    addEvent(doMoveInArea2, i*400, cid, 3, areas[i+1], NORMALDAMAGE, min, max, spell)

    addEvent(doMoveInArea2, i*410, cid, 3, areas[i+1], NORMALDAMAGE, 0, 0, spell)

end

   else

      sendEffWithProtect(cid, pos[n], eff)

      doMoveDano2(cid, pid, element, min, max, ret, spell) 

   end

   end

   l = l+1

end

end

-------------------------------------------

function doMoveDano2(cid, pid, element, min, max, ret, spell)

if isCreature(pid) and isCreature(cid) and cid ~= pid then

   if isNpcSummon(pid) and getCreatureTarget(pid) ~= cid then

      return true                             --alterado v1.6

   end

   if ehNPC(pid) then return true end

   ---

   local canAtk = true     --alterado v1.6

   if getPlayerStorageValue(pid, 21099) >= 1 then

      doSendMagicEffect(getThingPosWithDebug(pid), 135)

      doSendAnimatedText(getThingPosWithDebug(pid), "REFLECT", COLOR_GRASS)

      addEvent(docastspell, 100, pid, spell)

      if getCreatureName(pid) == "Wobbuffet" or getCreatureName(pid) == "Reflector Wobbuffet" or getCreatureName(pid) == "Wowofet" then

         doRemoveCondition(pid, CONDITION_OUTFIT)    

      end

      canAtk = false

      setPlayerStorageValue(pid, 21099, -1)

      setPlayerStorageValue(pid, 21100, 1)

      setPlayerStorageValue(pid, 21101, cid)

      setPlayerStorageValue(pid, 21103, getTableMove(cid, getPlayerStorageValue(cid, 21102)).f)

   end

   ---   

   if isSleeping(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

   if isWithFear(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

      if isSummon(cid) and (ehMonstro(pid) or (isSummon(pid) and canAttackOther(cid, pid) == "Can") or (isPlayer(pid) and canAttackOther(cid, pid) == "Can" and #getCreatureSummons(pid) <= 0)) and pid ~= cid then

         if canAtk then     --alterado v1.6

         if isInArray(JUMP_SPELLS, spell) then

    jump(pid, 1)

end

            if ret and ret.cond then

               ret.id = pid

               ret.check = getPlayerStorageValue(pid, conds[ret.cond])

               doCondition2(ret)

            end

            if spell == "Selfdestruct" then

               if getPlayerStorageValue(pid, 9658783) <= 0 then

                  doSendAnimatedText(getThingPosWithDebug(pid), "-"..max.."", COLOR_NORMAL)

                  doCreatureAddHealth(pid, -max)    --alterado v1.6

               end

            else

               doTargetCombatHealth(cid, pid, element, -(math.abs(min)), -(math.abs(max)), 255)

            end

         end

      elseif ehMonstro(cid) and (isSummon(pid) or (isPlayer(pid) and #getCreatureSummons(pid) <= 0)) and pid ~= cid then

         if canAtk then    --alterado v1.6

         if isInArray(JUMP_SPELLS, spell) then

    jump(pid, 1)

end

            if ret and ret.cond then

               ret.id = pid

               ret.check = getPlayerStorageValue(pid, conds[ret.cond])

               doCondition2(ret)

            end

            if spell == "Selfdestruct" then

               if getPlayerStorageValue(pid, 9658783) <= 0 then

                  doSendAnimatedText(getThingPosWithDebug(pid), "-"..max.."", COLOR_NORMAL)

                  doCreatureAddHealth(pid, -max)    --alterado v1.6

               end

            else

               doTargetCombatHealth(cid, pid, element, -(math.abs(min)), -(math.abs(max)), 255)

            end

         end

      elseif isPlayer(cid) and ehMonstro(pid) and pid ~= cid then

         if canAtk then    --alterado v1.6

            if ret and ret.cond then

               ret.id = pid

               ret.check = getPlayerStorageValue(pid, conds[ret.cond])

               doCondition2(ret)

            end

            if spell == "Selfdestruct" then

               if getPlayerStorageValue(pid, 9658783) <= 0 then

                  doSendAnimatedText(getThingPosWithDebug(pid), "-"..max.."", COLOR_NORMAL)

                  doCreatureAddHealth(pid, -max)    --alterado v1.6

               end

            else

               doTargetCombatHealth(cid, pid, element, -(math.abs(min)), -(math.abs(max)), 255)

            end

         end

      end

end

end

--------------------------------------------------------------------------------

function sendEffWithProtect(cid, pos, eff)  --Manda algum magic effect com prote輟es 

if not isCreature(cid) then return true end

if isSleeping(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

if isWithFear(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

local checkpos = pos

        checkpos.stackpos = 0

if not hasTile(checkpos) then

return true

end

if not canWalkOnPos2(pos, false, true, false, true, false) then --alterado v1.6

return true

end

   doSendMagicEffect(pos, eff)

end

---------------------------------------------------------------------------------

function getThingPosWithDebug(what)

    if not isCreature(what) or getCreatureHealth(what) <= 0 then

    return {x = 1, y = 1, z = 10}

    end

return getThingPos(what)

end

---------------------------------------------------------------------------------

function doDanoWithProtect(cid, element, pos, area, min, max, eff)  --Da dano com prote輟es

if not isCreature(cid) then return true end

if isSleeping(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

if isWithFear(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

   doAreaCombatHealth(cid, element, pos, area, -(math.abs(min)), -(math.abs(max)), eff)

end

---------------------------------------------------------------------------------

function doDanoWithProtectWithDelay(cid, target, element, min, max, eff, area)

const_distance_delay = 56

if not isCreature(cid) then return true end

if isSleeping(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

if isWithFear(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

   if target ~= 0 and isCreature(target) and not area then

      delay = getDistanceBetween(getThingPosWithDebug(cid), getThingPosWithDebug(target)) * const_distance_delay

      addEvent(doDanoWithProtect, delay, cid, element, getThingPosWithDebug(target), 0, min, max, eff)

      return true

   end

addEvent(doDanoWithProtect, 200, cid, element, getThingPosWithDebug(target), area, min, max, eff)

end   

--------------------------------------------------------------------------------

function sendDistanceShootWithProtect(cid, frompos, topos, eff)    --Manda um efeito de distancia com prote輟es

if not isCreature(cid) then return true end

if isSleeping(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

if isWithFear(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

   doSendDistanceShoot(frompos, topos, eff)

end

---------------------------------------------------------------------------------

function sendMoveBack(cid, pos, eff, min, max)     --Manda o Atk do farfetchd de volta...

local m = #pos+1

for i = 1, #pos do

    if not isCreature(cid) then return true end

    ---

    m = m-1

    thing = {x=pos[m].x,y=pos[m].y,z=pos[m].z,stackpos=253}

    local pid = getThingFromPosWithProtect(thing)

    addEvent(doMoveDano2, i*200, cid, pid, FLYINGDAMAGE, min/4, max/4)  

    addEvent(sendEffWithProtect, i*200, cid, pos[m], eff)   --alterado v1.3

    -- 

end

end  

---------------------------------------------------------------------------------

function upEffect(cid, effDis)

if not isCreature(cid) then return true end

if isSleeping(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

if isWithFear(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

pos = getThingPos(cid)

frompos = {x = pos.x+1, y = pos.y, z = pos.z}

frompos.x = pos.x - math.random(4, 7)

frompos.y = pos.y - math.random(5, 8):

doSendDistanceShoot(getThingPos(cid), frompos, effDis)

end

---------------------------------------------------------------------------------

function fall(cid, master, element, effDis, effArea)   --Function pra jogar efeitos pra cima e cair depois... tpw falling rocks e blizzard

if isCreature(cid) then

if isWithFear(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

if isSleeping(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

   pos = getThingPos(cid)

   pos.x = pos.x + math.random(-4,4)

   pos.y = pos.y + math.random(-4,4)

   if isMonster(cid) or isPlayer(cid) then

      frompos = {x = pos.x+1, y = pos.y, z = pos.z}

   elseif isSummon(cid) then

      frompos = getThingPos(master)

   end

   frompos.x = pos.x - 7

   frompos.y = pos.y - 6

   if effDis ~= -1 then                --alterado!

      doSendDistanceShoot(frompos, pos, effDis)

   end

   doAreaCombatHealth(cid, element, pos, 0, 0, 0, effArea)

end

end

---------------------------------------------------------------------------------

function canDoMiss(cid, nameAtk)                                            --alterado v1.5

local atkTerra = {"Sand Attack", "Mud Shot", "Mud Bomb", "Stomp", "Crusher Stomp", "Mud Slap", "Sand Tomb"} --alterado v1.7

local atkElectric = {"Electric Storm", "Thunder Wave", "Thunder", "Electricity", "Wild Charge"}  --alterado v1.7

if not isCreature(cid) then return false end

if isPlayer(cid) then return true end

if not pokes[getCreatureName(cid)] then return true end

if isInArray(atkTerra, nameAtk) then

   if (pokes[getCreatureName(cid)].type == "flying") or (pokes[getCreatureName(cid)].type2 == "flying") or isInArray(specialabilities["levitate"], getCreatureName(cid))  then

      return false      

   end

elseif isInArray(atkElectric, nameAtk) then

   if (pokes[getCreatureName(cid)].type == "ground") or (pokes[getCreatureName(cid)].type2 == "ground") then

      return false      

   end

end

return true

end

---------------------------------------------------------------------------------

function doMoveInAreaMulti(cid, effDis, effMagic, areaEff, areaDano, element, min, max, ret)   --alterado v1.7

if not isCreature(cid) then return true end                     

local pos = getPosfromArea(cid, areaEff)

local pos2 = getPosfromArea(cid, areaDano)

local n = 0

while n < #pos2 do

if not isCreature(cid) then return true end

if isSleeping(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

if isWithFear(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

n = n+1

thing = {x=pos2[n].x,y=pos2[n].y,z=pos2[n].z,stackpos=253}

      if n < #pos then

         addEvent(sendDistanceShootWithProtect, 50, cid, getThingPos(cid), pos[n], effDis) --39

         addEvent(sendEffWithProtect, 100, cid, pos[n], effMagic)  -- 112

         ---                                                                                        --alterado v1.6.1

         if math.random(1, 2) == 2 then

            addEvent(sendDistanceShootWithProtect, 450, cid, getThingPos(cid), pos[n], effDis) --550

            addEvent(sendEffWithProtect, 550, cid, pos[n], effMagic)  -- 650

         end

      end   

      local pid = getThingFromPosWithProtect(thing)

      if isCreature(pid) then

         if ret and ret.id == 0 then     --alterado v1.8

            ret.id = pid

            ret.check = getPlayerStorageValue(pid, conds[ret.cond])

         end

         if not ret then ret = {} end --alterado v1.7

         doMoveDano2(cid, pid, element, min, max, ret, getPlayerStorageValue(cid, 21102))

      end

end       

end 

---------------------------------------------------------------------------------------

function doDoubleHit(cid, pid, valor, races)           --alterado v1.6

if isCreature(cid) and isCreature(pid) then

   if getPlayerStorageValue(cid, 374896) >= 1 then

      if getMasterTarget(cid) == pid then

         if isInArray({"Kadabra", "Alakazam", "Mew", "Shiny Abra", "Shiny Alakazam"}, getCreatureName(cid)) then

            doSendDistanceShoot(getThingPosWithDebug(cid), getThingPosWithDebug(pid), 39)

         end

         if isSummon(cid) then

            doTargetCombatHealth(getCreatureMaster(cid), pid, PHYSICALDAMAGE, -math.abs(valor), -math.abs(valor), 255)

         else

            doCreatureAddHealth(pid, -math.abs(valor), 3, races[getMonsterInfo(getCreatureName(pid)).race].cor)

         end

      end

   end

end

end

---------------------------------------------------------------------------------------

function doDanoInTarget(cid, target, combat, min, max, eff)   --alterado v1.7

if not isCreature(cid) or not isCreature(target) then return true end

if isSleeping(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

if isWithFear(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

   doTargetCombatHealth(cid, target, combat, -math.abs(min), -math.abs(max), eff)

end 

-----------------------------------------------------------------------------------------

function doDanoInTargetWithDelay(cid, target, combat, min, max, eff)     --alterado v1.7

const_distance_delay = 56

if not isCreature(cid) or not isCreature(target) then return true end

if isSleeping(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

if isWithFear(cid) and getPlayerStorageValue(cid, 3644587) >= 1 then return true end

   local delay = getDistanceBetween(getThingPosWithDebug(cid), getThingPosWithDebug(target)) * const_distance_delay

   addEvent(doDanoInTarget, delay, cid, target, combat, min, max, eff)

end

 

alem de estar bugando os ataques sei la, olha aki o night shade deberia ser 1 circulo compleito ai ele só ta dando assim com pokes q tiver cure

430f989636a2e213216eac53e690e6a4.gif

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

  • 0

Ah sim, já vi o erro. Foi de fato falta de atenção minha na tabela, não tinha percebido que os valores estavam dentro de uma tabela. lol

Quando disse que havia testado no meu servidor, eu na verdade apenas testei a lógica e não detalhei com uma tabela, por isso o erro passou despercebido.

Basta trocar:

if math.random(1, 100) <= Tiers[held_item] then

por:

if math.random(1, 100) <= Tiers[held_item].chance then

 

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

  • 0
2 horas atrás, zipter98 disse:

Ah sim, já vi o erro. Foi de fato falta de atenção minha na tabela, não tinha percebido que os valores estavam dentro de uma tabela. lol

Quando disse que havia testado no meu servidor, eu na verdade apenas testei a lógica e não detalhei com uma tabela, por isso o erro passou despercebido.

Basta trocar:

if math.random(1, 100) <= Tiers[held_item] then

por:

if math.random(1, 100) <= Tiers[held_item].chance then

 

 

funfando porem bugou outra coisa, as spells q colocam inmuneravilidades ficaram bugadas

fabdc3ba9a7df0ac0228a230dcb9c50c.gif

[05/05/2016 21:07:21] [Error - Action Interface] 

[05/05/2016 21:07:21] data/actions/scripts/revive.lua:onUse

[05/05/2016 21:07:21] Description: 

[05/05/2016 21:07:21] data/lib/newStatusSyst.lua:751: attempt to concatenate field '?' (a table value)

[05/05/2016 21:07:21] stack traceback:

[05/05/2016 21:07:21]     data/lib/newStatusSyst.lua:751: in function 'cleanBuffs2'

[05/05/2016 21:07:21]     data/actions/scripts/revive.lua:44: in function <data/actions/scripts/revive.lua:3>

 

[05/05/2016 21:07:22] [Error - TalkAction Interface] 

[05/05/2016 21:07:22] data/talkactions/scripts/move1.lua:onSay

[05/05/2016 21:07:22] Description: 

[05/05/2016 21:07:22] data/lib/newStatusSyst.lua:619: attempt to concatenate local 'atributo' (a table value)

[05/05/2016 21:07:22] stack traceback:

[05/05/2016 21:07:22]     data/lib/newStatusSyst.lua:619: in function 'doBuff2'

[05/05/2016 21:07:22]     data/lib/newStatusSyst.lua:691: in function 'doCondition2'

[05/05/2016 21:07:22]     data/lib/pokemon moves.lua:4145: in function 'docastspell'

[05/05/2016 21:07:22]     data/talkactions/scripts/move1.lua:210: in function <data/talkactions/scripts/move1.lua:20>

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

  • 1

Não sei quem escreveu a função cleanBuffs2 do seu servidor, mas ela tá bem errada.

Troque:

function cleanBuffs2(item)    if item ~= 0 then        for i = 1, 3 do            doItemEraseAttribute(item, Buffs[1])            doItemEraseAttribute(item, Buffs[1].."eff")            doItemEraseAttribute(item, Buffs[1].."skill")        end       endend

por:

function cleanBuffs2(item)    if item ~= 0 then        for i = 1, 3 do            doItemEraseAttribute(item, Buffs[i][1])            doItemEraseAttribute(item, Buffs[i][1].."eff")            doItemEraseAttribute(item, Buffs[i][1].."skill")        end       endend

E, na função:

function doBuff2(cid, cd, eff, check, buff, first, attr)

troque:

atributo = Buffs[1]

por:

atributo = Buffs[i][1]

 

Link para o comentário
Compartilhar em outros sites

  • 0
42 minutos atrás, zipter98 disse:

Não sei quem escreveu a função cleanBuffs2 do seu servidor, mas ela tá bem errada.

Troque:

function cleanBuffs2(item)    if item ~= 0 then        for i = 1, 3 do            doItemEraseAttribute(item, Buffs[1])            doItemEraseAttribute(item, Buffs[1].."eff")            doItemEraseAttribute(item, Buffs[1].."skill")        end       endend

por:

function cleanBuffs2(item)    if item ~= 0 then        for i = 1, 3 do            doItemEraseAttribute(item, Buffs[i][1])            doItemEraseAttribute(item, Buffs[i][1].."eff")            doItemEraseAttribute(item, Buffs[i][1].."skill")        end       endend

E, na função:

function doBuff2(cid, cd, eff, check, buff, first, attr)

troque:

atributo = Buffs[1]

por:

atributo = Buffs[i][1]

 

 

certamente nao foi eu hahaha obrigado zip, sempre fico muito impressionado com o seu trabalho, resolve td tao facil assim ^^ é triste q vc nao tem endereço no seu perfil pra contribuir pra vc :/ obrigado e tomara q quando tiver como me der 1 força nesses bugs de pda

Link para o comentário
Compartilhar em outros sites

  • 0

@zipter98, obrigado pela força, tenho certeza que ajudou muita gente (além de nós, kappa).

But... eu achei um erro.

Caso você chame alguém para duelar e desista (tipo, não chegar nem a selecionar se vai ser 1x1, 2x2...), teu char buga. Você não consegue dar give up, soltar pokémon e tal.

 

Então, eu troquei

 if getPlayerStorageValue(master, 52480) < 1 then

por

 if getPlayerStorageValue(cid, 52480) ~= 1 then

e funcionou, não sei se isso acarreta em algum outro bug, mas funcionou por agora.

 

Bom, muito obrigado! =):

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

×
×
  • Criar Novo...