Ir para conteúdo
Propaganda

Posts Recomendados

Este sistema faz com que, ao pisar em um tile específico, o Pokémon summon entre em um estado temporário de "embriaguez" por 30 segundos. Durante esse período, o Pokémon se movimenta de forma aleatória e emite frases engraçadas a cada 2 segundos, simulando um comportamento instável e descontraído.

O efeito é controlado por uma variável interna que indica quando o Pokémon está sob essa condição. O estado de "bêbado" dura o tempo total estipulado (30 segundos), independentemente de o Pokémon permanecer sobre o tile ou não. Caso ele saia do tile, o efeito continua até seu término natural. Se o Pokémon voltar a pisar no tile depois que o efeito terminar, ele receberá o efeito novamente.



 

local drunkPhrases = {
    "Hic! Isso é suco de berry?",
    "Wobba wobba wobba!",
    "Onde tá meu treinador?!",
    "Eu vejo dois Pikachus... ou três...",
    "Esse chão tá girando..."
}

local DRUNK_DURATION = 30 -- segundos
local INTERVAL = 2 -- segundos
local STORAGE_DRUNK = 25887

function isWalkable(pos)
    local tile = getTileThingByPos(pos)
    if tile.itemid == 0 or hasProperty(tile.uid, CONST_PROP_BLOCKSOLID) then return false end
    if getTopCreature(pos).uid > 0 then return false end
    return true
end

function getRandomWalkablePos(pos)
    local directions = {
        {x = pos.x + 1, y = pos.y, z = pos.z},
        {x = pos.x - 1, y = pos.y, z = pos.z},
        {x = pos.x, y = pos.y + 1, z = pos.z},
        {x = pos.x, y = pos.y - 1, z = pos.z}
    }
    local valid = {}
    for _, newPos in ipairs(directions) do
        if isWalkable(newPos) then
            table.insert(valid, newPos)
        end
    end
    if #valid > 0 then
        return valid[math.random(#valid)]
    else
        return nil
    end
end

function simulateDrunkBehavior(cid, ticks)
    if not isCreature(cid) or getCreatureStorage(cid, STORAGE_DRUNK) ~= 1 then return end
    if ticks <= 0 then
        doCreatureSetStorage(cid, STORAGE_DRUNK, 0)
        return
    end

    doCreatureSay(cid, drunkPhrases[math.random(#drunkPhrases)], TALKTYPE_MONSTER)

    local currentPos = getThingPos(cid)
    local newPos = getRandomWalkablePos(currentPos)
    if newPos then
        doTeleportThing(cid, newPos, true)
    end

    addEvent(simulateDrunkBehavior, INTERVAL * 1000, cid, ticks - 1)
end

function onStepIn(cid, item, pos)
    if isSummon(cid) and getCreatureStorage(cid, STORAGE_DRUNK) ~= 1 then
        doCreatureSetStorage(cid, STORAGE_DRUNK, 1)
        simulateDrunkBehavior(cid, math.floor(DRUNK_DURATION / INTERVAL))
        print("[DEBUG] " .. getCreatureName(cid) .. " ficou bêbado (summon).")
    end
    return true
end

function onStepOut(cid, item, pos)
    if isSummon(cid) and getCreatureStorage(cid, STORAGE_DRUNK) == 1 then
        doCreatureSetStorage(cid, STORAGE_DRUNK, 0)
        print("[DEBUG] " .. getCreatureName(cid) .. " saiu do efeito bêbado (summon).")
    end
    return true
end
<movevent type="StepIn" actionid="5013" event="script" value="beldo.lua"/>


Também coloquei pra que caso ele receba esse DRUNK ele não consiga utilizar os ataques, então em move1.lua vocês coloquem.

 

if getCreatureStorage(mypoke, 25887) == 1 then
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_RED, "Seu Pokémon está tonto e não pode usar esse movimento.")
    return true -- bloqueia o uso do movimento
end

 

  • Like 2
  • Thanks 1
Link para o comentário
https://tibiadevs.com/forums/topic/1155-drunken-wanderer-pokemon/
Compartilhar em outros sites

  • Suporte

A equipe Tibia Devs agradeçe pela contribuição

Com certeza será útil pra muita gente

Link para o comentário
https://tibiadevs.com/forums/topic/1155-drunken-wanderer-pokemon/#findComment-5956
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...