Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Bom dia pessoal, será q alguem pode me ajudar?

tenho esse script onde é um boss ao puxar a alavanca
porém, mesmo quando já tem gente fazendo  o boss, qualquer outra pessoa consegue adentrar a sala tb

Queria que apenas 1 por vez, conseguisse entrar na sala

 

-- CONFIG --
    local playersOnly = "no"
    local questLevel = 1
    local STORAGE_BOSS_CD = 22497
    local cdtime = 20 * 60 * 60 -- exhaust in seconds

        local room = {     -- room with demons
        fromX = 1032,
        fromY = 1014,
        fromZ = 7,

        toX = 1044,
        toY = 1020,
        toZ = 7
        }

    local monster_pos = {
        [1] = {pos = {1042, 1017, 7}, monster = "Tibia bug"}
    }

    local players_pos = {
        {x = 1033, y = 1010, z = 7, stackpos = 253}
    }

    local new_player_pos = {
        {x = 1035, y = 1017, z = 7}
    }
-- CONFIG END --

function onUse(cid, item, fromPosition, itemEx, toPosition)
    local all_ready, monsters, player, level = 0, 0, {}, 0

    if item.itemid == 1946 then
        for i = 1, #players_pos do
            table.insert(player, 0)
        end
        for i = 1, #players_pos do
            player[i] = getThingfromPos(players_pos[i])
            if player[i].itemid > 0 then
                if string.lower(playersOnly) == "yes" then
                    if isPlayer(player[i].uid) == true then
                        all_ready = all_ready+1
                    else
                        monsters = monsters+1
                    end
                else
                    all_ready = all_ready+1
                end
            end
        end
        if all_ready == #players_pos then
            for i = 1, #players_pos do
                player[i] = getThingfromPos(players_pos[i])
                if isPlayer(player[i].uid) == true then
                    if getPlayerStorageValue(player[i].uid,STORAGE_BOSS_CD) > os.time() then
                        doPlayerSendCancel(cid,"Voce já fez o boss hoje, tente amanhã !!! .")
                        return false
                    end
                    if getPlayerLevel(player[i].uid) >= questLevel then
                        level = level+1
                    end
                else
                    level = level+1
                end
            end
            if level == #players_pos then
                if string.lower(playersOnly) == "yes" and monsters == 0 or string.lower(playersOnly) == "no" then
                    for _, area in pairs(monster_pos) do
                        doSummonCreature(area.monster,{x=area.pos[1],y=area.pos[2],z=area.pos[3]})
                    end
                    for i = 1, #players_pos do
                        doSendMagicEffect(players_pos[i], CONST_ME_POFF)
                        doTeleportThing(player[i].uid, new_player_pos[i])
                        doSendMagicEffect(new_player_pos[i], CONST_ME_ENERGYAREA)
                        setPlayerStorageValue(player[i].uid,STORAGE_BOSS_CD,os.time() + cdtime)
                    end
                    doTransformItem(item.uid,1945)
                else
                    doPlayerSendTextMessage(cid,19,"Apenas players tem acesso.")
                    return false
                end
            else
                doPlayerSendTextMessage(cid,19,"Voce tem que estar no level: "..questLevel.." p.")
                return false
            end
        else
            doPlayerSendCancel(cid,"Fique em cima do SQM correto para ter acesso a sala.")
            return false
        end
    elseif item.itemid == 1945 then
        local player_room = 0
        for x = room.fromX, room.toX do
            for y = room.fromY, room.toY do
                for z = room.fromZ, room.toZ do
                    local pos = {x=x, y=y, z=z,stackpos = 253}
                    local thing = getThingfromPos(pos)
                    if thing.itemid > 0 then
                        if isPlayer(thing.uid) == true then
                            player_room = player_room+1
                        end
                    end
                end
            end
        end
        if player_room >= 1 then
            doPlayerSendTextMessage(cid,19,"Time fazendo o boss, aguarde.")
            return false
        elseif player_room == 0 then
            for x = room.fromX, room.toX do
                for y = room.fromY, room.toY do
                    for z = room.fromZ, room.toZ do
                        local pos = {x=x, y=y, z=z,stackpos = 253}
                        local thing = getThingfromPos(pos)
                        if thing.itemid > 0 then
                            doRemoveCreature(thing.uid)
                        end
                    end
                end
            end
            doTransformItem(item.uid,1946)
        end
    end

    return true
end



 

Link para o post
Compartilhar em outros sites
  • Sub-Admin
Postado (editado)
1 hora atrás, bottacini disse:

@UP

use o botão para UP, evite comentar pra subir a publicação.

 

 

eu uso esse no meu servidor, vc pode usar como base

 

function onUse(cid, item, fromPosition, itemEx, toPosition, Position)
    local leverItemId = 1945
    local leverActionId = 5281
    local monsterName = "Grindelgroth"
    local monsterPosition = {x = 1014, y = 1002, z = 7}
    local radiusX = 4 -- Raio X = 8 / 2
    local radiusY = 6 -- Raio Y = 12 / 2
    local teleportPosition = {x = 1023, y = 1002, z = 7}
    local townId = 1 -- Defina o ID da cidade
local numbersala = "1"

    if (item.itemid == leverItemId or item.itemid == 1946) and item.actionid == leverActionId then
        local centerX = monsterPosition.x
        local centerY = monsterPosition.y
        for x = -radiusX, radiusX do
            for y = -radiusY, radiusY do
                local pos = {x = centerX + x, y = centerY + y, z = monsterPosition.z}
                local creature = getTopCreature(pos).uid
                if creature ~= 0 and isCreature(creature) then
                    if isPlayer(creature) then
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Há um jogador bloqueando a alavanca. Você não pode ativá-la agora.")
                    else
                        doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Há uma criatura bloqueando a alavanca. Você não pode ativá-la agora.")
                    end
                    return true
                end
            end
        end
		
		
		if getPlayerStorageValue(cid, item.actionid) == 1 then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Você já completou esta Sala. Continue sua jornada e busque pela próxima Sala do Perigo no mapa.")
            doSendMagicEffect(getCreaturePosition(cid), 2)
            return true
        end
		
        -- Verificar se o jogador tem um summon
        local playerSummon = getCreatureSummons(cid)[1]
        if playerSummon then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Você não pode ativar a alavanca enquanto tiver um summon.")
            return true
        end
        
        -- Verificar se a criatura já está presente
        local existingCreature = getTopCreature(monsterPosition).uid
        if existingCreature ~= 0 and isCreature(existingCreature) then
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Já há uma criatura presente. Você não pode ativar a alavanca agora.")
            return true
        end
        
        if item.itemid == leverItemId then
            doTransformItem(item.uid, 1946)
        end
        
        -- Invocar a criatura com efeito visual
        local monster = doSummonCreature(monsterName, monsterPosition)
        if monster then
            doSendMagicEffect(monsterPosition, EFFECT_TELEPORT_DOWN)
        end
        
        -- Teleportar o jogador para a posição especificada com efeito visual
        if isPlayer(cid) then
            doTeleportThing(cid, teleportPosition)
            doSendMagicEffect(teleportPosition, EFFECT_TELEPORT_UP)
            
            -- Anunciar que um jogador está na Sala do Perigo 1
            doBroadcastMessage("O jogador " .. getCreatureName(cid) .. " está na Sala do Perigo ".. numbersala..".", 20)
            
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "Você entrou na arena, cuidado!")
        end
        
        -- Agendar a remoção da criatura após 5 segundos
        addEvent(function()
            if isCreature(monster) then
                doRemoveCreature(monster)
                -- Teleportar o jogador para o templo da cidade após a remoção do monstro

                    local templePos = getTownTemplePosition(townId)
                    doTeleportThing(cid, templePos)
                    doSendMagicEffect(templePos, EFFECT_TELEPORT)
         doPlayerSendTextMessage(cid, MESSAGE_STATUS_WARNING, "Você foi expulso Sala do Perigo, você está muito fraco.")
            end
        end, 100000)
        
        return true
    end
    return false
end



 

quantos sqm tem a sala aonde nasce o montro? posso fazer uma verificação se há players naqueles spms se tiver ninguem entra

Editado por L3K0T (veja o histórico de edições)

 

20230912_034613.png.cf49b650c34dd7d7b1f79bd49c70f53c.png

Eu sou um entusiasta da programação apaixonado por ajudar a comunidade open source a crescer. Sempre em busca de novos desafios e oportunidades para contribuir com meu código.  #OpenSource #Programação #Contribuição

 

Link para o post
Compartilhar em outros sites
8 horas atrás, L3K0T disse:

use o botão para UP, evite comentar pra subir a publicação.

 

 

eu uso esse no meu servidor, vc pode usar como base

 



 

quantos sqm tem a sala aonde nasce o montro? posso fazer uma verificação se há players naqueles spms se tiver ninguem entra

Bom dia

a area do boss é essa da foto 

enviei uma foto

 

 

boss area.png

 

O esquema é que apenas 1 player consiga acessar ela por vez

 

e tenha um coldown de 20 horas @L3K0T

Link para o post
Compartilhar em outros sites
  • Sub-Admin
Em 09/05/2024 em 08:34, bottacini disse:

Bom dia

a area do boss é essa da foto 

enviei uma foto

 

 

boss area.png

 

O esquema é que apenas 1 player consiga acessar ela por vez

 

e tenha um coldown de 20 horas @L3K0T

Preciso do nome do monstro

Preciso das posição do sqm aonde ele nasce

Preciso a Acion ID da alavanca que você colocou nela

e Preciso saber que storage você quer usar pra contagem do tempo???

 

 

20230912_034613.png.cf49b650c34dd7d7b1f79bd49c70f53c.png

Eu sou um entusiasta da programação apaixonado por ajudar a comunidade open source a crescer. Sempre em busca de novos desafios e oportunidades para contribuir com meu código.  #OpenSource #Programação #Contribuição

 

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo