Ir para conteúdo
Propaganda

Posts Recomendados

Boa tarde!

Se alguem souber e puder me ajudar ficaria muito grato, estou usando a base pokemonster aqui do forum, porém estou com um problema ao capturar qualquer pokemon aparece que  esta fainted... segue print abaixo. Porém não consigo utilizar o pokemon, ele não cura nem na Joy e nem com revive e não está aparecendo nenhum erro nem na distro, nem no terminal do cliente. 

Segue meu catch.lua

function doPlayerSendEffect(cid, effect)
    local player = Player(cid)
    if player then
        player:getPosition():sendMagicEffect(effect)
    end
    return true
end

function doPlayerAddExperience(cid, exp)
    local player = Player(cid)
    if player then
        player:addExperience(exp, true)
    end
    return true
end

function isPokemonNormal(name)
    name = name:lower()
    local isShiny = string.find(name, "shiny ")
    local isMega = string.find(name, "mega ")
    return not isShiny and not isMega
end

function isPokemonShiny(name)
    name = name:lower()
    local isShiny = string.find(name, "shiny ")
    return isShiny
end

-- Função para dar XP na primeira captura de um Pokémon
function giveFirstCatchXP(player, pokeName)
    local playerName = player:getName()
    local query = db.storeQuery("SELECT * FROM first_catch_xp WHERE player_name = '" .. playerName .. "' AND pokemon_name = '" .. pokeName .. "'")
    
    if not query then
        -- Primeira vez que captura esse Pokémon
        local xpAmount = 5000 -- Ajuste conforme necessário
        player:addExperience(xpAmount, true)

        db.query("INSERT INTO first_catch_xp (player_name, pokemon_name) VALUES ('" .. playerName .. "', '" .. pokeName .. "')")

        player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "Primeira captura! Você ganhou " .. xpAmount .. " experiência.")
    end
end

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    local tile = Tile(toPosition)
    if not tile or not tile:getTopDownItem() then
        return false
    end

    local topItem = tile:getTopDownItem()
    local itemType = ItemType(topItem:getId())
    if not itemType:isCorpse() and not string.find(itemType:getName(), "fainted") then
        return false
    end

    local targetCorpse = topItem
    local owner = targetCorpse:getAttribute(ITEM_ATTRIBUTE_CORPSEOWNER)
    if owner ~= 0 and owner ~= player:getId() then
        player:sendCancelMessage("Sorry, not possible. You are not the owner.")
        return true
    end

    local ballKey = getBallKey(item:getId())
    local playerPos = getPlayerPosition(player)
    local d = getDistanceBetween(playerPos, toPosition)
    local delay = d * 80
    local delayMessage = delay + 2800
    local name = targetCorpse:getName()

    name = string.gsub(name, " a ", "")
    name = string.gsub(name, " an ", "")
    name = string.gsub(name, "fainted ", "")
    name = name:gsub("^%l", string.upper) -- capitalizeFirstLetter alternativo

    local monsterType = MonsterType(name)
    if not monsterType then
        print("WARNING! Monster " .. name .. " with bug on catch!")
        player:sendCancelMessage("Sorry, not possible. This problem was reported.")
        playerPos:sendMagicEffect(CONST_ME_POFF)
        targetCorpse:remove()
        return true
    end

    local type = monsterType:getRaceName() or "none"
    local type2 = monsterType:getRace2Name() or "none"
    local pontos = 0

    if isInArray(LOWER_PALWORLD_MONSTERS, string.lower(name)) then
        type = "palworld"
        type2 = "palworld"
    end

    local pontuacao1 = TYPES_POINTS[type] and TYPES_POINTS[type][item.itemid] or 0
    local pontuacao2 = TYPES_POINTS[type2] and TYPES_POINTS[type2][item.itemid] or 0
    pontos = math.max(pontuacao1, pontuacao2)

    if isInArray(LOWER_PALWORLD_MONSTERS, string.lower(name)) then
        if not isInArray(ALLOWED_POKEBALLS_PALWORLD, item.itemid) then
            player:sendCancelMessage("Você só pode capturar pals com esferas.")
            return true
        end
    end

    if isInArray(LOWER_MASTERBALL_BLOCKED, string.lower(name)) then
        if item.itemid == 13228 then
            player:sendCancelMessage("Esse pokémon é bloqueado o uso de masterball.")
            return true
        end
    end

    local chanceBase = monsterType:catchChance()
    if chanceBase == 0 then
        playerPos:sendMagicEffect(CONST_ME_POFF)
        player:sendCancelMessage("Sorry, it is impossible to catch this monster.")
        return true
    end

    local guild = player:getGuild()
    if guild then
        local hasCriticalCatchBuff = guild:hasBuff(COLUMN_4, CRITICAL_CATCH_BUFF)
        if hasCriticalCatchBuff and math.random(0, 100) <= GUILD_BUFF_LUCKY then
            chanceBase = chanceBase * 2
            (toPosition + Position(1, 1, 0)):sendMagicEffect(2511)
            (toPosition + Position(1, 1, 0)):sendMagicEffect(2512)
        end
    end

    local chance = chanceBase * (balls[ballKey] and balls[ballKey].chanceMultiplier or 1)

    doSendDistanceShoot(playerPos, toPosition, balls[ballKey] and balls[ballKey].missile or 0)
    item:remove(1)
    targetCorpse:remove()

    if math.random(0, 10000) <= chance or (INFOS_CATCH[string.lower(name)] and (pontos + player:getCatchPoints(name)) >= INFOS_CATCH[string.lower(name)].pontos) then
        -- Adiciona o Pokémon
        player:addPokemon(name, item.itemid)

        -- Dar XP pela primeira captura
        giveFirstCatchXP(player, name)

        player:resetCatchTry(name)

        addEvent(doSendMagicEffect, delay, toPosition, balls[ballKey] and balls[ballKey].effectSucceed or CONST_ME_NONE)
        addEvent(doPlayerSendTextMessage, delayMessage, player:getId(), MESSAGE_EVENT_ADVANCE, "Parabéns! Você pegou um " .. name .. "! Seu Pokémon foi para o Depot.")
        addEvent(doPlayerSendEffect, delayMessage, player:getId(), 179)
    else
        addEvent(doSendMagicEffect, delay, toPosition, balls[ballKey] and balls[ballKey].effectFail or CONST_ME_POFF)
        addEvent(doPlayerSendEffect, delayMessage, player:getId(), 170)
        addEvent(function()
            if Player(player:getId()) then
                player:addCatchTry(name, BALLS_CATCH_ID[item.itemid], pontos)
            end
        end, delay)
        return true
    end

    return true
end

image.png.2ec6d0bf39decfa561a804c77ed2d422.png

  • Like 1
Link para o comentário
https://tibiadevs.com/forums/topic/1148-fainted-ao-capiturar-poke/
Compartilhar em outros sites

14 horas atrás, Danijo disse:

Agradeço por estar confiando ao Tibia Devs o dever de suprir as suas dúvidas

No arquivo " NewFunctions"  que se encontra na pasta Lib do servidor 

Logo no início existe a tabela ballkey

Verifique se os ids das Pokebolas estão corretos juntamente do itens.xml

 

No caso, "empty pokeball" etc...

 

Os ids precisam bater

A estrutura do pokemonster é meio diferente, não encontrei "newFunctions", porém achei o arquivo "NewCatchs" dentro da "lib" e se for esse o local certo esta configurado com os ids das "empty ball".

Ou sera que devo colocar o "id" das ball sem descrição, pois aqui tem "used ball", "fainted ball", "empty ball" e "ball" sem nenhum adjetivo junto.

image.png.7c18bd771fbd2ddeeee6c542ae053f30.png

=================== EDIT 

Testei com os id dos que ta só "pokeball","ultraball" etc ai nem jogava a ball, voltei pro id das "empty ball" ta capiturando porém a ball vem fainted.

 

Link para o comentário
https://tibiadevs.com/forums/topic/1148-fainted-ao-capiturar-poke/#findComment-5925
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
  • Criar Novo...