Ir para conteúdo

Featured Replies

Postado

Olá, pessoal do TK.

Estou com um problema bem chato que estou a dias atrás para resolver mas não consigo, nesses últimos dias adc um sistema de gender no meu otp.

Funciona tudo corretamente, porém na distro acusa esse erro:

[17/12/2023 22:31:40] [Error - Action Interface] 
[17/12/2023 22:31:40] In a timer event called from: 
[17/12/2023 22:31:40] data/actions/scripts/catch.lua:onUse
[17/12/2023 22:31:40] Description: 
[17/12/2023 22:31:40] data/actions/scripts/catch.lua:599: attempt to index local 'status' (a nil value)
[17/12/2023 22:31:40] stack traceback:
[17/12/2023 22:31:40]     data/actions/scripts/catch.lua:599: in function <data/actions/scripts/catch.lua:582>

 

Meu catch: 

Spoiler

failmsgs = {
    "Sorry, you didn't catch that pokemon.",
    "Sorry, your pokeball broke.",
    "Sorry, the pokemon escaped.",
}

function doBrokesCount(cid, str, ball) --alterado v1.9 \/
    if not isCreature(cid) then return false end
    local tb = {
        {b = "poke", v = 0},
        {b = "great", v = 0},
        {b = "super", v = 0},
        {b = "ultra", v = 0},
        {b = "vball", v = 0},
        {b = "saffari", v = 0},
        {b = "dark", v = 0},
        {b = "magu", v = 0},
        {b = "sora", v = 0},
        {b = "yume", v = 0},
        {b = "dusk", v = 0},
        {b = "tale", v = 0},
        {b = "moon", v = 0},
        {b = "net", v = 0},
        {b = "premier", v = 0},
        {b = "tinker", v = 0},
        {b = "fast", v = 0},
        {b = "heavy", v = 0},
    }
    for _, e in ipairs(tb) do
        if e.b == ball then
            e.v = 1
            break
        end
    end
    local strings = getPlayerStorageValue(cid, str)
    
    local t = "normal = (.-), great = (.-), super = (.-), ultra = (.-), vball = (.-), saffari = (.-), dark = (.-), magu = (.-), sora = (.-), yume = (.-), dusk = (.-), tale = (.-), moon = (.-), net = (.-), premier = (.-), tinker = (.-), fast = (.-), heavy = (.-);"
    local t2 = ""
    for n, g, s, u, v, s2, d, magu, sora, yume, dusk, tale, moon, net, premier, tinker, fast, heavy in strings:gmatch(t) do
        t2 = "normal = "..(n+tb[1].v)..", great = "..(g+tb[2].v)..", super = "..(s+tb[3].v)..", ultra = "..(u+tb[4].v)..", vball = "..(v+tb[5].v)..", saffari = "..(s2+tb[6].v)..", dark = "..(d+tb[7].v)..", magu = "..(magu+tb[8].v)..", sora = "..(sora+tb[9].v)..", yume = "..(yume+tb[10].v)..", dusk = "..(dusk+tb[11].v)..", tale = "..(tale+tb[12].v)..", moon = "..(moon+tb[13].v)..", net = "..(net+tb[14].v)..", premier = "..(premier+tb[15].v)..", tinker = "..(tinker+tb[16].v)..", fast = "..(fast+tb[17].v)..", heavy = "..(heavy+tb[18].v)..";" 
    end
    
    setPlayerStorageValue(cid, str, strings:gsub(t, t2))
end

function sendBrokesMsg(cid, str, ball, poke, catched)
    if not isCreature(cid) then return true end
    local strings = getPlayerStorageValue(cid, str)
    if type(strings) == "number" or type(strings) ~= "string" or not string.find(strings, "magu") then --alterado v1.9 
        setPlayerStorageValue(cid, str, "normal = 0, great = 0, super = 0, ultra = 0, vball = 0, saffari = 0, dark = 0;") 
        strings = getPlayerStorageValue(cid, str) --alterado v1.9 
    end 
    local t = "normal = (.-), great = (.-), super = (.-), ultra = (.-), vball = (.-), saffari = (.-), dark = (.-), magu = (.-), sora = (.-), yume = (.-), dusk = (.-), tale = (.-), moon = (.-), net = (.-), premier = (.-), tinker = (.-), fast = (.-), heavy = (.-);"
    local msg = {}
    local countN, countG, countS, countU, countV, countS2 = 0, 0, 0, 0, 0, 0
    local maguCount, soraCount, yumeCount, duskCount, taleCount, moonCount, netCount, premierCount, tinkerCount, fastCount, heavyCount = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
    table.insert(msg, "Você"..(catched == false and " já" or "").." gastou: ")
    
    for n, g, s, u, v, s2, d, magu, sora, yume, dusk, tale, moon, net, premier, tinker, fast, heavy in strings:gmatch(t) do
        if tonumber(n) and tonumber(n) > 0 then 
            table.insert(msg, tostring(n).." Poke ball".. (tonumber(n) > 1 and "s" or "")) 
            countN = tonumber(n)
        end
        if tonumber(g) and tonumber(g) > 0 then 
            table.insert(msg, (#msg > 1 and ", " or "").. tostring(g).." Great ball".. (tonumber(g) > 1 and "s" or "")) 
            countG = tonumber(g)
        end
        if tonumber(s) and tonumber(s) > 0 then 
            table.insert(msg, (#msg > 1 and ", " or "").. tostring(s).." Super ball".. (tonumber(s) > 1 and "s" or "")) 
            countS = tonumber(s)
        end
        if tonumber(u) and tonumber(u) > 0 then 
            table.insert(msg, (#msg > 1 and ", " or "").. tostring(u).." Ultra ball".. (tonumber(u) > 1 and "s" or "")) 
            countU = tonumber(u)
        end
        if tonumber(v) and tonumber(v) > 0 then 
            table.insert(msg, (#msg > 1 and ", " or "").. tostring(v).." Vball".. (tonumber(v) > 1 and "s" or "")) 
            countV = tonumber(v)
        end
        if tonumber(s2) and tonumber(s2) > 0 then 
            table.insert(msg, (#msg > 1 and ", " or "").. tostring(s2).." Saffari ball".. (tonumber(s2) > 1 and "s" or "")) 
            countS2 = tonumber(s2)
        end
        
        if tonumber(magu) and tonumber(magu) > 0 then 
            table.insert(msg, (#msg > 1 and ", " or "").. tostring(magu).." Magu ball".. (tonumber(magu) > 1 and "s" or "")) 
            maguCount = tonumber(magu)
        end
        
        if tonumber(sora) and tonumber(sora) > 0 then 
            table.insert(msg, (#msg > 1 and ", " or "").. tostring(sora).." Sora ball".. (tonumber(sora) > 1 and "s" or "")) 
            soraCount = tonumber(sora)
        end
        
        if tonumber(yume) and tonumber(yume) > 0 then 
            table.insert(msg, (#msg > 1 and ", " or "").. tostring(yume).." Yume ball".. (tonumber(yume) > 1 and "s" or "")) 
            yumeCount = tonumber(yume)
        end
        
        if tonumber(dusk) and tonumber(dusk) > 0 then 
            table.insert(msg, (#msg > 1 and ", " or "").. tostring(dusk).." Dusk ball".. (tonumber(dusk) > 1 and "s" or "")) 
            duskCount = tonumber(dusk)
        end
        
        if tonumber(tale) and tonumber(tale) > 0 then 
            table.insert(msg, (#msg > 1 and ", " or "").. tostring(tale).." Tale ball".. (tonumber(tale) > 1 and "s" or "")) 
            taleCount = tonumber(tale)
        end
        
        if tonumber(moon) and tonumber(moon) > 0 then 
            table.insert(msg, (#msg > 1 and ", " or "").. tostring(moon).." Moon ball".. (tonumber(moon) > 1 and "s" or "")) 
            moonCount = tonumber(moon)
        end
        
        if tonumber(net) and tonumber(net) > 0 then 
            table.insert(msg, (#msg > 1 and ", " or "").. tostring(net).." Net ball".. (tonumber(net) > 1 and "s" or "")) 
            netCount = tonumber(net)
        end
        
        if tonumber(premier) and tonumber(premier) > 0 then 
            table.insert(msg, (#msg > 1 and ", " or "").. tostring(premier).." Premier ball".. (tonumber(premier) > 1 and "s" or "")) 
            premierCount = tonumber(premier)
        end
        
        if tonumber(tinker) and tonumber(tinker) > 0 then 
            table.insert(msg, (#msg > 1 and ", " or "").. tostring(tinker).." Tinker ball".. (tonumber(tinker) > 1 and "s" or "")) 
            tinkerCount = tonumber(tinker)
        end
        
        if tonumber(fast) and tonumber(fast) > 0 then 
            table.insert(msg, (#msg > 1 and ", " or "").. tostring(fast).." Fast ball".. (tonumber(fast) > 1 and "s" or "")) 
            fastCount = tonumber(fast)
        end
        
        if tonumber(heavy) and tonumber(heavy) > 0 then 
            table.insert(msg, (#msg > 1 and ", " or "").. tostring(heavy).." Heavy ball".. (tonumber(heavy) > 1 and "s" or "")) 
            heavyCount = tonumber(heavy)
        end
    end
    if #msg == 1 then
        return true
    end
    if string.sub(msg[#msg], 1, 1) == "," then
        msg[#msg] = " e".. string.sub(msg[#msg], 2, #msg[#msg])
    end
    table.insert(msg, " para"..(catched == false and " tentar" or "").." captura-lo.")

    addEvent(sendMsgToPlayer, 3000, cid, 27, table.concat(msg))

    if catched then
        local ballsCatchedString = countN .. "-" .. countG .. "-" .. countS .. "-" .. countU .. "-" .. countS2 .. "-" .. maguCount .. "-" .. soraCount .. "-" .. yumeCount .. "-" .. duskCount .. "-" .. taleCount .. "-" .. moonCount .. "-" .. netCount .. "-" .. premierCount .. "-" .. tinkerCount .. "-" ..fastCount .. "-" .. heavyCount
        local list = getCatchList(cid)
        if not jaCapturou(cid, poke) then 
            local expssss = 100
            if newpokedexCatchXpMasterx[doCorrectString(poke)].expCatch then
                expssss = newpokedexCatchXpMasterx[doCorrectString(poke)].expCatch
            end    
            addEvent(doSendPlayerExtendedOpcode, 2900, cid, 105, getItemInfo(fotos[poke]).clientId .. "-" .. expssss .. "-" .. poke .. "-" .. ballsCatchedString)
            addEvent(doPlayerAddExp, 2900, cid, (expssss/100))
            addEvent(doSendAnimatedText, 2900, getThingPos(cid), (expssss/100) , 215)
            addEvent(doPlayerAddInKantoCatchs, 2900, cid, 1)
            addEvent(colocarNaListaDeCapturados, 2900, cid, poke)
        end
    end
end
--------------------------------------------------------------------------------
function colocarNaListaDeCapturados(cid, poke)
    setPlayerStorageValue(cid, fotos[poke], 1)
end

function jaCapturou(cid, poke)
    local storage = getPlayerStorageValue(cid, fotos[poke])
    if storage ~= -1 then
        return true
    end
    return false
end

function getWastedBall(cid, str)
    local storage = getPlayerStorageValue(cid, str)
    local pokeballsCount = {normal = 0, great = 0, super = 0, ultra = 0, vball = 0, saffari = 0, dark = 0, magu = 0, sora = 0, yume = 0, dusk = 0, tale = 0, moon = 0, net = 0, premier = 0, tinker = 0, fast = 0, heavy = 0}
    if storage == -1 then
        return pokeballsCount
    end
    local t = "normal = (.-), great = (.-), super = (.-), ultra = (.-), vball = (.-), saffari = (.-), dark = (.-), magu = (.-), sora = (.-), yume = (.-), dusk = (.-), tale = (.-), moon = (.-), net = (.-), premier = (.-), tinker = (.-), fast = (.-), heavy = (.-);"
    for n, g, s, u, v, s2, d, maguu, sora, yume, dusk, tale, moon, net, premier, tinker, fast, heavy in storage:gmatch(t) do
        if tonumber(n) and tonumber(n) > 0 then 
            pokeballsCount.normal = tonumber(n)
        end
        
        if tonumber(g) and tonumber(g) > 0 then 
            pokeballsCount.great = tonumber(g)
        end
        if tonumber(s) and tonumber(s) > 0 then 
            pokeballsCount.super = tonumber(s)
        end
        if tonumber(u) and tonumber(u) > 0 then 
            pokeballsCount.ultra = tonumber(u)
        end
        if tonumber(v) and tonumber(v) > 0 then 
            pokeballsCount.vball = tonumber(v)
        end        
        if tonumber(s2) and tonumber(s2) > 0 then 
            pokeballsCount.saffari = tonumber(s2)
        end
        
        if tonumber(maguu) and tonumber(maguu) > 0 then 
            pokeballsCount.magu = tonumber(maguu)
        end
        
        if tonumber(sora) and tonumber(sora) > 0 then 
            pokeballsCount.sora = tonumber(sora)
        end
        
        if tonumber(yume) and tonumber(yume) > 0 then 
            pokeballsCount.yume = tonumber(yume)
        end
        
        if tonumber(dusk) and tonumber(dusk) > 0 then 
            pokeballsCount.dusk = tonumber(dusk)
        end
        
        if tonumber(tale) and tonumber(tale) > 0 then 
            pokeballsCount.tale = tonumber(tale)
        end
        
        if tonumber(moon) and tonumber(moon) > 0 then 
            pokeballsCount.moon = tonumber(moon)
        end
        
        if tonumber(net) and tonumber(net) > 0 then 
            pokeballsCount.net = tonumber(net)
        end
        
        if tonumber(premier) and tonumber(premier) > 0 then 
            pokeballsCount.premier = tonumber(premier)
        end
        
        if tonumber(tinker) and tonumber(tinker) > 0 then 
            pokeballsCount.tinker = tonumber(tinker)
        end
        
        if tonumber(fast) and tonumber(fast) > 0 then 
            pokeballsCount.fast = tonumber(fast)
        end
        
        if tonumber(heavy) and tonumber(heavy) > 0 then 
            pokeballsCount.heavy = tonumber(heavy)
        end
    end
    return pokeballsCount
end

function doSendPokeBall(cid, catchinfo, showmsg, fullmsg, typeee) --Edited brokes count system
    
    local name = doCorrectString(catchinfo.name)
    local pos = catchinfo.topos
    local topos = {}
    topos.x = pos.x
    topos.y = pos.y
    topos.z = pos.z
    local newid = catchinfo.newid
    local catch = catchinfo.catch
    local fail = catchinfo.fail
    local rate = catchinfo.rate
    local clevel = catchinfo.clevel
    -- local basechance = catchinfo.chance
    
    if not getTopCorpse(topos) then
        return true
    end
    
    local corpse = getTopCorpse(topos).uid
    if not isCreature(cid) then
        doSendMagicEffect(topos, CONST_ME_POFF)
        return true
    end
    
    doItemSetAttribute(corpse, "catching", 1)
    
    local str = newpokedexCatchXpMasterx[name].stoCatch
    local Wast = getWastedBall(cid, str)
    local doCatch = false
    
    local playerPoints = 0
    
    if Wast.normal > 0 then
        playerPoints = playerPoints + (ballsTypesCatch["pokeball"] * Wast.normal)
    end
    
    if Wast.great > 0 then
        playerPoints = playerPoints + (ballsTypesCatch["greatball"] * Wast.great)
    end
    
    if Wast.super > 0 then
        playerPoints = playerPoints + (ballsTypesCatch["superball"] * Wast.super)
    end
    
    if Wast.ultra > 0 then
        playerPoints = playerPoints + (ballsTypesCatch["ultraball"] * Wast.ultra)
    end

    if Wast.vball > 0 then
        if string.find(name, "Shiny") then 
            playerPoints = playerPoints + ((ballsTypesCatch["vballShiny"]) * Wast.vball)
        else
            playerPoints = playerPoints + (ballsTypesCatch["vball"] * Wast.vball)
        end
    end
    
    if Wast.saffari > 0 then
        playerPoints = playerPoints + (ballsTypesCatch["saffariball"] * Wast.saffari)
    end
    
    if Wast.premier > 0 then
        playerPoints = playerPoints + (ballsTypesCatch["premierball"] * Wast.premier)
    end
    
    if Wast.magu > 0 then
        playerPoints = playerPoints + (ballsTypesCatch["maguball"] * Wast.magu)
    end
    
    if Wast.sora > 0 then
        playerPoints = playerPoints + (ballsTypesCatch["soraball"] * Wast.sora)
    end
    
    if Wast.yume > 0 then
        playerPoints = playerPoints + (ballsTypesCatch["yumeball"] * Wast.yume)
    end
    
    if Wast.dusk > 0 then
        playerPoints = playerPoints + (ballsTypesCatch["duskball"] * Wast.dusk)
    end
    
    if Wast.tale > 0 then
        playerPoints = playerPoints + (ballsTypesCatch["taleball"] * Wast.tale)
    end
    
    if Wast.moon > 0 then
        playerPoints = playerPoints + (ballsTypesCatch["moonball"] * Wast.moon)
    end
    
    if Wast.net > 0 then
        playerPoints = playerPoints + (ballsTypesCatch["netball"] * Wast.net)
    end
    
    if Wast.tinker > 0 then
        playerPoints = playerPoints + (ballsTypesCatch["tinkerball"] * Wast.tinker)
    end
    
    if Wast.fast > 0 then
        playerPoints = playerPoints + (ballsTypesCatch["fastball"] * Wast.fast)
    end
    
    if Wast.heavy > 0 then
        playerPoints = playerPoints + (ballsTypesCatch["heavyball"] * Wast.heavy)
    end
    
    pokeTab = pokeChance[name]

    if pokeTab then

        pokeTabMedia = pokeTab.media
        if string.find(name, "Shiny") then
            pokeTabMedia = pokeTab.media * 3
        end

        local pokeChance = pokeTabMedia * ballsTypesCatch[pokeTab.balltype]
        
        local tableMinBall = { --
            ["pokeball"] = "Poke Ball", -- Se eu joguei pokeball, ganhará 1 point por cada
            ["greatball"] = "Great Ball", -- Se eu joguei great ball, ganhará 2 points por cada
            ["superball"] = "Super Ball", -- Se eu joguei superball, ganhará 3 points por cada
            ["ultraball"] = "Ultra Ball", -- Se eu joguei ultraball, ganhará 4 points por cada          
            ["vball"] = "V Ball", -- Se eu joguei ultraball, ganhará 4 points por cada          
            ["saffariball"] = "Saffari Ball", -- Se eu joguei ultraball, ganhará 4 points por cada          
        }
        
        local tablert = { -- typeee para type normal
            ["poke"] = 1,
            ["great"] = 2,
            ["super"] = 3,
            ["ultra"] = 5,
            ["vball"] = 3,
            ["premier"] = 6,
            ["magu"] = 6,
            ["sora"] = 6,
            ["yume"] = 6,
            ["dust"] = 6,
            ["tale"] = 6,
            ["moon"] = 6,
            ["net"] = 6,
            ["tinker"] = 6,
            ["fast"] = 6,
            ["heavy"] = 6,
            ["saffari"] = 6,
        }
        
        if tablert[typeee] < ballsTypesCatch[pokeTab.minBallType] then
            doPlayerSendTextMessage(cid, 20, "Você só pode capturar ".. name .." com ".. tableMinBall[pokeTab.minBallType] .." ou superior.")
            addEvent(doNotCapturePokemon, 3000, cid, name, typeee) 
            doSendMagicEffect(topos, fail)
            doRemoveItem(corpse, 1)
            return true
        end
        
        if playerPoints > pokeChance and not isShinyName(name) then
            
            local extraChance = (pokeChance - playerPoints) * -1
            
            if extraChance < 10 and pokeChance > 160 then
                --doPlayerSendTextMessage(cid, 20, "Sistema de persistência no catch ativado! Para mais informações, diga !persistencia")
            end
            
            local Eachpercent = math.ceil(extraChance * 0.6) -- 0.7 velocidade em q aumenta rate por ball
            
            playerPoints = playerPoints + (Eachpercent)     
            
        end
        
        local media = pokeTabMedia
        local finalRand = 0
        
        if media < 26 then
            local rand1 = math.random(1, pokeChance)
            local rand2 = math.random(1, pokeChance)
            local rand3 = math.random(1, pokeChance)
            finalRand = math.floor((rand1 + rand2 + rand3)* 1.1)
            
        elseif media >= 26 and media < 60 then
            
            local rand1 = math.random(1, pokeChance)
            local rand2 = math.random(1, pokeChance)
            local rand3 = math.random(1, pokeChance)
            finalRand = math.ceil((rand1 + rand2 + rand3)* 1.2)
            
        elseif media >= 60 and media <= 100 then
            
            local rand1 = math.random(1, pokeChance)
            local rand2 = math.random(1, pokeChance)
            local rand3 = math.random(1, pokeChance)
            local rand4 = math.random(1, pokeChance)
            finalRand = math.floor((rand1 + rand2 + rand3 + rand4)/1.35)
            
        elseif media > 100 and media <= 180 then
            
            local rand1 = math.random(1, pokeChance)
            local rand2 = math.random(1, pokeChance)
            local rand3 = math.random(1, pokeChance)
            local rand4 = math.random(1, pokeChance)
            local rand5 = math.random(1, pokeChance)
            finalRand = math.floor((rand1 + rand2 + rand3 + rand4 + rand5)/1.55)    
            
        elseif media > 180 and media <= 250 then
            
            local rand1 = math.random(1, pokeChance)
            local rand2 = math.random(1, pokeChance)
            local rand3 = math.random(1, pokeChance)
            local rand4 = math.random(1, pokeChance)
            local rand5 = math.random(1, pokeChance)
            local rand6 = math.random(1, pokeChance)
            finalRand = math.floor((rand1 + rand2 + rand3 + rand4 + rand5 + rand6)/1.65)
            
        elseif media > 250 and media <= 300 then
            
            local rand1 = math.random(1, pokeChance)
            local rand2 = math.random(1, pokeChance)
            local rand3 = math.random(1, pokeChance)
            local rand4 = math.random(1, pokeChance)
            local rand5 = math.random(1, pokeChance)
            local rand6 = math.random(1, pokeChance)
            finalRand = math.floor((rand1 + rand2 + rand3 + rand4 + rand5 + rand6)/1.70)
            
        elseif media > 300 and media <= 350 then
            
            local rand1 = math.random(1, pokeChance)
            local rand2 = math.random(1, pokeChance)
            local rand3 = math.random(1, pokeChance)
            local rand4 = math.random(1, pokeChance)
            local rand5 = math.random(1, pokeChance)
            local rand6 = math.random(1, pokeChance)
            finalRand = math.floor((rand1 + rand2 + rand3 + rand4 + rand5 + rand6)/1.75)
            
        elseif media > 350 and media <= 400 then
            
            local rand1 = math.random(1, pokeChance)
            local rand2 = math.random(1, pokeChance)
            local rand3 = math.random(1, pokeChance)
            local rand4 = math.random(1, pokeChance)
            local rand5 = math.random(1, pokeChance)
            local rand6 = math.random(1, pokeChance)
            finalRand = math.floor((rand1 + rand2 + rand3 + rand4 + rand5 + rand6)/1.78) -- 1.80
            
        elseif media > 400 and media <= 450 then
            
            local rand1 = math.random(1, pokeChance)
            local rand2 = math.random(1, pokeChance)
            local rand3 = math.random(1, pokeChance)
            local rand4 = math.random(1, pokeChance)
            local rand5 = math.random(1, pokeChance)
            local rand6 = math.random(1, pokeChance)
            finalRand = math.floor((rand1 + rand2 + rand3 + rand4 + rand5 + rand6)/1.82) -- 1.85
            
        else
            
            local rand1 = math.random(1, pokeChance)
            local rand2 = math.random(1, pokeChance)
            local rand3 = math.random(1, pokeChance)
            local rand4 = math.random(1, pokeChance)
            local rand5 = math.random(1, pokeChance)
            local rand6 = math.random(1, pokeChance)
            finalRand = math.floor((rand1 + rand2 + rand3 + rand4 + rand5 + rand6)/1.84) -- 1.9     
            
        end
        
        if getPlayerStorageValue(cid, 394672) >= 1 then
            doSendMagicEffect(topos, catch)
            addEvent(doCapturePokemon, 3000, cid, name, newid, nil, typeee, clevel)

            sendBrokesMsg(cid, newpokedexCatchXpMasterx[name].stoCatch , typeee, name, true) 
            setPlayerStorageValue(cid, newpokedexCatchXpMasterx[name].stoCatch, "normal = 0, great = 0, super = 0, ultra = 0, vball = 0, saffari = 0, dark = 0, magu = 0, sora = 0, yume = 0, dusk = 0, tale = 0, moon = 0, net = 0, premier = 0, tinker = 0, fast = 0, heavy = 0;")
            doIncreaseStatistics(name, true, true)

            doRemoveItem(corpse, 1)         
            return true     
        elseif typeee == "premier" then  -- premier ball
            local premierMedia = pokeTabMedia  
            local premierBase = 2        
            
            if name == "Magikarp" then
                premierMedia = 2
                premierBase = 1      
            elseif premierMedia <= 3 or isInArray({"Rattata", "Caterpie", "Weedle", "Pidgey", "Oddish", "Bellsprout"}, name) then
                premierMedia = 5 -- 2/5 de chance, melhor que 1/3 e menor que 1/2
                premierBase = 2
            elseif premierMedia >= 4 and premierMedia <= 6 then
                premierMedia = 6
                premierBase = 1
            elseif premierMedia >= 7 and premierMedia <= 10 then
                premierMedia = 10
                premierBase = 1
            end      
            
            local premierChance = math.random(1, premierMedia) 
            
            if premierChance <= premierBase then        
                doSendMagicEffect(topos, catch)
                addEvent(doCapturePokemon, 3000, cid, name, newid, nil, typeee, clevel)

                sendBrokesMsg(cid, newpokedexCatchXpMasterx[name].stoCatch , typeee, name, true) 
                setPlayerStorageValue(cid, newpokedexCatchXpMasterx[name].stoCatch, "normal = 0, great = 0, super = 0, ultra = 0, vball = 0, saffari = 0, dark = 0, magu = 0, sora = 0, yume = 0, dusk = 0, tale = 0, moon = 0, net = 0, premier = 0, tinker = 0, fast = 0, heavy = 0;")
                doIncreaseStatistics(name, true, true)

                doRemoveItem(corpse, 1)
                return true     
            end
        else
            -- doPlayerSendTextMessage(cid, 27, "playerPoints: "..playerPoints)
            -- doPlayerSendTextMessage(cid, 27, "finalRand: "..finalRand)
            if playerPoints > finalRand then
                doSendMagicEffect(topos, catch)
                addEvent(doCapturePokemon, 3000, cid, name, newid, nil, typeee, clevel) 

                sendBrokesMsg(cid, newpokedexCatchXpMasterx[name].stoCatch , typeee, name, true) 
                setPlayerStorageValue(cid, newpokedexCatchXpMasterx[name].stoCatch, "normal = 0, great = 0, super = 0, ultra = 0, vball = 0, saffari = 0, dark = 0, magu = 0, sora = 0, yume = 0, dusk = 0, tale = 0, moon = 0, net = 0, premier = 0, tinker = 0, fast = 0, heavy = 0;")
                doIncreaseStatistics(name, true, true)

        local status = {}
        status.gender = getItemAttribute(corpse, "gender")
        status.happy = 160

        doRemoveItem(corpse, 1)
        doSendMagicEffect(topos, catch)
        addEvent(doCapturePokemon, 3000, cid, name, newid, status, typeee)  
            return true
         end
      end
   end
end
    

function doCapturePokemon(cid, poke, ballid, status, typeee, clevel) 
    
    if not isCreature(cid) then
        return true
    end


    local depot = false        
    if getPlayerFreeCap(cid) >= 6 or not hasSpaceInContainer(getPlayerSlotItem(cid, 3).uid) then 
        depot = true
    end

    item = doCreateItemEx(ballid) 

    local natureList = {"Hardy", "Lonely", "Brave", "Adamant", "Bold", "Docile", "Relaxad", "Impish", "Modest", "Mild", "Quiet", "Bashful", "Quirky", "Timid", "Hasty", "Serius", "Jolly"}
    local nature = natureList[math.random(#natureList)]
    local description = "Contains a "..poke.."."
    local gender = status.gender
    local happy = 200
    if not clevel or (clevel <= 1) then
        clevel = 1
    end

    doItemSetAttribute(item, "poke", poke)
    doItemSetAttribute(item, "nome", poke)  
    doItemSetAttribute(item, "gender", gender)
    doItemSetAttribute(item, "happy", happy)
    doItemSetAttribute(item, "color1", 0)
    doItemSetAttribute(item, "color2", 0)
    doItemSetAttribute(item, "color3", 0)
    doItemSetAttribute(item, "color4", 0)
    doItemSetAttribute(item, "addonNow", getOutfitPoke(poke))
    doItemSetAttribute(item, "hp", 1)
    doItemSetAttribute(item, "nature", nature)
    doItemSetAttribute(item, "iv", math.random(31)) 
    doItemSetAttribute(item, "ev", 0) 
    doItemSetAttribute(item, "exp", 0)
    doItemSetAttribute(item, "level", 1)
    doItemSetAttribute(item, "level", clevel)
    doItemSetAttribute(item, "fakedesc", description)
    doItemSetAttribute(item, "description", description)    
    doItemSetAttribute(item, "tadport", fotos[poke])
    doItemSetAttribute(item, "ballorder", getPlayerFreeCap(cid)+1)
    
    if poke == "Hitmonchan" or poke == "Shiny Hitmonchan" then 
        doItemSetAttribute(item, "hands", 0)
    end

    doItemSetAttribute(item, "morta", "no")   
    doItemSetAttribute(item, "boost", 0) 
    
    for _, oid in ipairs(getPlayersOnline()) do
        doPlayerSendChannelMessage(oid, "Catch System", "O jogador [".. getCreatureName(cid) .."] capturou um ["..poke.."] usando "..typeee.." ball.", TALKTYPE_CHANNEL_W, 10)
    end
    
    if pokeballs[poke:lower()] then
        doTransformItem(item, pokeballs[poke:lower()].on)   
    end 
    
    doPlayerSendTextMessage(cid, 27, "Parabéns, você pegou um ("..poke..")!")
    
    if #getCreatureSummons(cid) >= 1 then
        doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 173) 
    else
        doSendMagicEffect(getThingPos(cid), 173) 
    end
    
    -- if typeee == "master" then
        -- doItemSetAttribute(item, "unique", true) 
    -- elseif typeee == "premier" then
    --     doItemSetAttribute(item, "aura", "red")
    --     doPlayerSendTextMessage(cid, 27, "Utilize o comando !aura para trocar de aura")     
    -- end
    
    if depot then 
        local cidade = 1
        doPlayerSendPokeCPName(getCreatureName(cid), item, 1)
        doPlayerSendTextMessage(cid, 27, "Você já está segurando 6 pokemons ou não tem espaço na bag, por isso, esta pokebola foi enviada para o seu depósito.")
        if string.find(poke, "Shiny") then 
            db.executeQuery("UPDATE player_catchs SET pokemon_id = '".. poke .."', player_name = '".. getCreatureName(cid) .."' WHERE id = '1';")
        end
    else
        addPokeInFreeBag(getPlayerSlotItem(cid, 3).uid, item) 
        if string.find(poke, "Shiny") then 
            db.executeQuery("UPDATE player_catchs SET pokemon_id = '".. poke .."', player_name = '".. getCreatureName(cid) .."' WHERE id = '1';")
        end
    end
    doUpdatePokemonsBar(cid)
    
    if poke == tostring(getPlayerStorageValue(cid, catchModes.storage2)) and not hasCatched(cid) then
        setDailyCatched(cid, true)
        doPlayerSendTextMessage(cid, 27, "Daily Catch: Você terminou a missão! Volte para pegar sua recompensa!")
    end
    
--    local storage = newpokedex[poke].stoCatch 
--    sendBrokesMsg(cid, storage, typeee, poke, true) 
--    setPlayerStorageValue(cid, storage, "normal = 0, great = 0, super = 0, ultra = 0, saffari = 0, dark = 0, magu = 0, sora = 0, yume = 0, dusk = 0, tale = 0, moon = 0, net = 0, premier = 0, tinker = 0, fast = 0, heavy = 0;")
--    doIncreaseStatistics(poke, true, true)
end

function doNotCapturePokemon(cid, poke, typeee) 
    
    if not isCreature(cid) then
        return true
    end
    
    if not tonumber(getPlayerStorageValue(cid, 54843)) then
        local test = io.open("data/sendtobrun123.txt", "a+")
        local read = ""
        if test then
            read = test:read("*all")
            test:close()
        end
        read = read.."\n[csystem.lua] "..getCreatureName(cid).." - "..getPlayerStorageValue(cid, 54843)..""
        local reopen = io.open("data/sendtobrun123.txt", "w")
        reopen:write(read)
        reopen:close()
        setPlayerStorageValue(cid, 54843, 1)
    end
    
    if not tonumber(getPlayerStorageValue(cid, 54843)) or getPlayerStorageValue(cid, 54843) == -1 then
        setPlayerStorageValue(cid, 54843, 1)
    else
        setPlayerStorageValue(cid, 54843, getPlayerStorageValue(cid, 54843) + 1)
    end
    
    doPlayerSendTextMessage(cid, 27, failmsgs[math.random(#failmsgs)])
    
    if #getCreatureSummons(cid) >= 1 then
        doSendMagicEffect(getThingPos(getCreatureSummons(cid)[1]), 166)
    else
        doSendMagicEffect(getThingPos(cid), 166)
    end
    
    local storage = newpokedexCatchXpMasterx[poke].stoCatch

    if not string.find(getPlayerStorageValue(cid, storage), "vball") then
        setPlayerStorageValue(cid, storage, "normal = 0, great = 0, super = 0, ultra = 0, vball = 0, saffari = 0, dark = 0, magu = 0, sora = 0, yume = 0, dusk = 0, tale = 0, moon = 0, net = 0, premier = 0, tinker = 0, fast = 0, heavy = 0;")
    end
    doIncreaseStatistics(poke, true, false)
    -- sendBrokesMsg(cid, storage, ball, poke, false)
end

function getPlayerInfoAboutPokemon(cid, poke)
    poke = doCorrectString(poke)
    local a = newpokedex[poke]
    if not isPlayer(cid) then return false end
    if not a then
        print("Error while executing function \"getPlayerInfoAboutPokemon(\""..getCreatureName(cid)..", "..poke..")\", "..poke.." doesn't exist.")
        return false
    end
    local b = getPlayerStorageValue(cid, a.storage)
    
    if b == -1 then
        setPlayerStorageValue(cid, a.storage, poke..":")
    end
    
    local ret = {}
    if string.find(b, "catch,") then
        ret.catch = true
    else
        ret.catch = false
    end
    if string.find(b, "dex,") then
        ret.dex = true
    else
        ret.dex = false
    end
    if string.find(b, "use,") then
        ret.use = true
    else
        ret.use = false
    end
    return ret
end


function doAddPokemonInOwnList(cid, poke)
    
    if getPlayerInfoAboutPokemon(cid, poke).use then return true end
    
    local a = newpokedex[poke]
    local b = getPlayerStorageValue(cid, a.storage)
    
    setPlayerStorageValue(cid, a.storage, b.." use,")
end

function isPokemonInOwnList(cid, poke)
    
    if getPlayerInfoAboutPokemon(cid, poke).use then return true end
    
    return false
end

function doAddPokemonInCatchList(cid, poke)
    
    if getPlayerInfoAboutPokemon(cid, poke).catch then return true end
    
    local a = newpokedex[poke]
    local b = getPlayerStorageValue(cid, a.storage)
    
    setPlayerStorageValue(cid, a.storage, b.." catch,")
end

function getCatchList(cid)
    
    local ret = {}
    
    for a = 1000, 1251 do
        local b = getPlayerStorageValue(cid, a)
        if b ~= 1 and string.find(b, "catch,") then
            table.insert(ret, oldpokedex[a-1000][1])
        end
    end
    
    return ret
    
end


function getStatistics(pokemon, tries, success)
    
    local ret1 = 0
    local ret2 = 0
    
    local poke = ""..string.upper(string.sub(pokemon, 1, 1))..""..string.lower(string.sub(pokemon, 2, 30))..""
    local dir = "data/Pokemon Statistics/"..poke.." Attempts.txt"
    local arq = io.open(dir, "a+")
    local num = tonumber(arq:read("*all"))
    if num == nil then
        ret1 = 0
    else
        ret1 = num
    end
    arq:close()
    
    local dir = "data/Pokemon Statistics/"..poke.." Catches.txt"
    local arq = io.open(dir, "a+")
    local num = tonumber(arq:read("*all"))
    if num == nil then
        ret2 = 0
    else
        ret2 = num
    end
    arq:close()
    
    if tries == true and success == true then
        return ret1, ret2
    elseif tries == true then
        return ret1
    else
        return ret2
    end
end

function doIncreaseStatistics(pokemon, tries, success)
    
    local poke = ""..string.upper(string.sub(pokemon, 1, 1))..""..string.lower(string.sub(pokemon, 2, 30))..""
    
    if tries == true then
        local dir = "data/Pokemon Statistics/"..poke.." Attempts.txt"
        
        local arq = io.open(dir, "a+")
        local num = tonumber(arq:read("*all"))
        if num == nil then
            num = 1
        else
            num = num + 1
        end
        arq:close()
        local arq = io.open(dir, "w")
        arq:write(""..num.."")
        arq:close()
    end
    
    if success == true then
        local dir = "data/Pokemon Statistics/"..poke.." Catches.txt"
        
        local arq = io.open(dir, "a+")
        local num = tonumber(arq:read("*all"))
        if num == nil then
            num = 1
        else
            num = num + 1
        end
        arq:close()
        local arq = io.open(dir, "w")
        arq:write(""..num.."")
        arq:close()
    end
end

function doUpdateGeneralStatistics()
    
    local dir = "data/Pokemon Statistics/Pokemon Statistics.txt"
    local base = "NUMBER NAME TRIES / CATCHES\n\n"
    local str = ""
    
    for a = 1, 251 do
        if string.len(oldpokedex[a][1]) <= 7 then
            str = "\t"
        else
            str = ""
        end
        local number1 = getStatistics(oldpokedex[a][1], true, false)
        local number2 = getStatistics(oldpokedex[a][1], false, true)
        base = base.."["..threeNumbers(a).."]\t"..oldpokedex[a][1].."\t"..str..""..number1.." / "..number2.."\n"
    end
    
    local arq = io.open(dir, "w")
    arq:write(base)
    arq:close()
end

function getGeneralStatistics()
    
    local dir = "data/Pokemon Statistics/Pokemon Statistics.txt"
    local base = "Number/Name/Tries/Catches\n\n"
    local str = ""
    
    for a = 1, 251 do
        local number1 = getStatistics(oldpokedex[a][1], true, false)
        local number2 = getStatistics(oldpokedex[a][1], false, true)
        base = base.."["..threeNumbers(a).."] "..oldpokedex[a][1].." "..str..""..number1.." / "..number2.."\n"
    end
    
    return base
end

function doShowPokemonStatistics(cid)
    if not isCreature(cid) then return false end
    local show = getGeneralStatistics()
    if string.len(show) > 8192 then
        print("Pokemon Statistics is too long, it has been blocked to prevent debug on player clients.")
        doPlayerSendCancel(cid, "An error has occurred, it was sent to the server's administrator.") 
        return false
    end
    doShowTextDialog(cid, math.random(2391, 2394), show)
end

local ballcatch = { --id normal, id da ball shiy
    [2394] = {cr = 1, on = 193, off = 192, ball = {11826, 11737}, send = 47, typeee = "poke", boost = "0"}, --alterado v1.9 \/
    [2391] = {cr = 3, on = 198, off = 197, ball = {11832, 11740}, send = 48, typeee = "great", boost = "0"},
    [2393] = {cr = 6, on = 202, off = 201, ball = {11835, 11743}, send = 46, typeee = "super", boost = "0"},
    [2392] = {cr = 8, on = 200, off = 199, ball = {11829, 11746}, send = 49, typeee = "ultra", boost = "0"},
    [19610] = {cr = 6, on = 1038, off = 1039, ball = {19613, 19613}, send = 105, typeee = "vball", boost = "0"},
    [12617] = {cr = 5, on = 204, off = 203, ball = {10975, 12621}, send = 35, typeee = "saffari", boost = "0"}, 
    [12832] = {cr = 100000, on = 23, off = 24, ball = {12826, 12829}, send = 181, typeee = "master", boost = "50"},
    
    [15677] = {cr = 10, on = 313, off = 314, ball = {16181, 16204}, send = 72, typeee = "magu", boost = "0", type = {"fire", "ground"}},
    [15676] = {cr = 10, on = 316, off = 317, ball = {16182, 16205}, send = 73, typeee = "sora", boost = "0", type = {"ice", "flying"}},
    [15678] = {cr = 10, on = 320, off = 321, ball = {16183, 16206}, send = 74, typeee = "yume", boost = "0", type = {"normal", "psychic"}},
    [15680] = {cr = 10, on = 322, off = 323, ball = {16184, 16207}, send = 75, typeee = "dusk", boost = "0", type = {"rock", "fighting"}},
    [15673] = {cr = 10, on = 331, off = 332, ball = {16187, 16210}, send = 78, typeee = "tale", boost = "0", type = {"dragon", "fairy"}},
    [15674] = {cr = 10, on = 334, off = 335, ball = {16188, 16211}, send = 79, typeee = "moon", boost = "0", type = {"dark", "ghost"}},
    [15675] = {cr = 10, on = 337, off = 338, ball = {16189, 16212}, send = 80, typeee = "net", boost = "0", type = {"bug", "water"}},
    [15681] = {cr = 10, on = 346, off = 347, ball = {16192, 16215}, send = 83, typeee = "tinker", boost = "0", type = {"electric", "steel"}},
    
    [15679] = {cr = 3, on = 343, off = 344, ball = {16191, 16214}, send = 82, typeee = "premier", boost = "0"},
    
    [15682] = {cr = 10, on = 325, off = 326, ball = {16185, 16208}, send = 76, typeee = "fast", boost = "0", pokes = {"Shiny Dodrio", "Dodrio", "Shiny Arcanine", "Arcanine", "Pikachu", "Raichu", "Shiny Raichu", "Beedrill", "Shiny Beedrill"}},
    [15672] = {cr = 10, on = 328, off = 329, ball = {16186, 16209}, send = 77, typeee = "heavy", boost = "0", pokes = {"Snorlax", "Venusaur", "Blastoise", "Rhydon", "Shiny Snorlax", "Shiny Venusaur", "Shiny Blastoise", "Shiny Rhydon", "Graveler", "Golem", "Shiny Golem", "Lapras"}},
}

function onUse(cid, item, frompos, item3, topos)
    
    local item2 = getTopCorpse(topos)
    if item2 == null then
        return true
    end
    
    if getItemAttribute(item2.uid, "catching") == 1 then
        return true
    end 
    
    -- if isInDuel(cid) then
    --     doPlayerSendCancel(cid, "Você não pode capturar nenhum pokémon enquanto está em duel.")
    --     return true
    -- end
    
    local name = string.lower(getItemAttribute(item2.uid, "poke"))
    name = string.gsub(name, "fainted ", "")
    name = string.gsub(name, "defeated ", "")
    name = doCorrectPokemonName(name)
    
    local smeargleID = 5
    if name:find("Smeargle") then
        smeargleID = string.sub(name, 9, 10)
        name = "Smeargle"
    end
    -- local x = pokecatchesMasterx[name]
    
    -- if not x then return true end
    
    local storage = newpokedexCatchXpMasterx[name].stoCatch 
    
    if type(getPlayerStorageValue(cid, storage)) ~= "string" or not string.find(getPlayerStorageValue(cid, storage), "magu") then --alterado v1.9 
        setPlayerStorageValue(cid, storage, "normal = 0, great = 0, super = 0, ultra = 0, vball = 0, saffari = 0, dark = 0, magu = 0, sora = 0, yume = 0, dusk = 0, tale = 0, moon = 0, net = 0, premier = 0, tinker = 0, fast = 0, heavy = 0;") --alterado v1.9 
    end 
    
    local owner = getItemAttribute(item2.uid, "corpseowner")
    local pOwner = getPlayerByName(owner)
    local isInParyWithPlayer = false
    if isInParty(cid) and isInParty(pOwner) then
        isInParyWithPlayer = isPartyEquals(pOwner, cid)
    end

    -- doSendMsg(cid, owner)

    if owner and isCreature(pOwner) and isPlayer(pOwner) and cid ~= pOwner and not isInParyWithPlayer then 
        doPlayerSendCancel(cid, "Desculpa. Isso não é possivel.")
        return true
    end
    
    local newidd = isShinyName(name) and ballcatch[item.itemid].ball[2] or ballcatch[item.itemid].ball[1] --alterado v1.9 
    local typeee = ballcatch[item.itemid].typeee
    local boost = ballcatch[item.itemid].boost  
    
    local catchBlocks = {"Moltres", "Articuno", "Zapdos", "Aerodactyl", "Kabutops", "Kabuto", "Hitmonlee", "Hitmonchan", "Hitmontop", "Omastar", "Omanyte"}
    if isInArray(catchBlocks, name) then
        doSendMsg(cid, "Você não pode capturar este pokemon.")
        return true
    end
    
    if typeee == "master" and isShinyName(name) then
        doSendMsg(cid, "Você não pode capturar pokemon shiny com a master ball.")
        return true
    end
    
    
    local catchinfo = {}
    catchinfo.rate = ballcatch[item.itemid].cr 
    catchinfo.catch = ballcatch[item.itemid].on
    catchinfo.fail = ballcatch[item.itemid].off
    catchinfo.newid = newidd 
    catchinfo.name = doCorrectPokemonName(name)
    catchinfo.topos = topos
    catchinfo.clevel = tonumber(getItemAttribute(item2.uid, "level"))
    -- catchinfo.chance = 2500
    -- catchinfo.chance = x.chance
    
    doBrokesCount(cid, newpokedexCatchXpMasterx[doCorrectPokemonName(name)].stoCatch , typeee)
    
    doSendDistanceShoot(getThingPos(cid), topos, ballcatch[item.itemid].send)
    doRemoveItem(item.uid, 1)
    
    local d = getDistanceBetween(getThingPos(cid), topos)


    if not getTopCorpse(topos) then
        return true
    end
    doItemSetAttribute(getTopCorpse(topos).uid, "catching", 1)
    
    
    setPlayerStorageValue(cid, 423512, 1)
    addEvent(function() if isCreature(cid) then setPlayerStorageValue(cid, 423512, -1) end end, 1500)
    addEvent(doSendPokeBall, d * 70 + 100 - (d * 14) , cid, catchinfo, false, false, typeee, smeargleID) 
    addEvent(doSendMagicEffect, (d * 70 + 100 - (d * 14)) - 100, topos, 3)
    return true
end
 


 

Participe da conversa

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

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo